小编Ric*_*rdK的帖子

Java 8可选:ifPresent返回对象orElseThrow异常

我想做这样的事情:

 private String getStringIfObjectIsPresent(Optional<Object> object){
        object.ifPresent(() ->{
            String result = "result";
            //some logic with result and return it
            return result;
        }).orElseThrow(MyCustomException::new);
    }
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为ifPresent将Consumer功能接口作为参数,其具有void accept(T t).它不能返回任何值.还有其他办法吗?

java lambda optional

28
推荐指数
4
解决办法
7万
查看次数

指定的目录不是有效的GlassFish安装

我正在尝试在Windows 7 64位上使用Eclipse安装GlassFish 4.一切都很顺利,但是当我尝试设置服务器root时,会发生什么(dir存在):

GlassFish的

glassfish

12
推荐指数
1
解决办法
9543
查看次数

JavaFX TextArea如何使用自动换行符设置文本

在我的应用程序中,我使用两个Tabs.在第一个我放置HtmlEditor,在第二个我放置TextArea.HTML选项卡是默认的,当用户创建HTML输入时,他可以切换到TextArea以直接查看/更改HTML源代码.我添加了一个监听器来从HtmlEditor获取rhe htmlText并将其设置为TextArea中的文本,因此用户可以轻松地在HTML和源模式之间切换.这是我的倾听者:

@FXML
private Tab htmlTab;

@FXML
private Tab sourceTab;

@FXML
private HTMLEditor htmlEditor;

@FXML
private TextArea textEditor;

        htmlTab.selectedProperty().addListener(new ChangeListener<Boolean>() {
        @Override
        public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
            if (htmlTab.isSelected()) {
                htmlEditor.setHtmlText(textEditor.getText());
            }
        }
    });

    sourceTab.selectedProperty().addListener(new ChangeListener<Boolean>() {
        @Override
        public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
            if (sourceTab.isSelected()) {
                textEditor.setText(htmlEditor.getHtmlText());
            }
        }
    });
Run Code Online (Sandbox Code Playgroud)

它工作正常,但HtmlEditor自动将文本分成行.当我切换到TextArea时,它都在一行中.

我想过制作一个辅助方法,它采用TextArea长度属性来计算字符数,并在每个"n"字符中添加新的行字符,但也许有更好的解决方案?

java textarea javafx

8
推荐指数
1
解决办法
2万
查看次数

Java - 如何以多种方式对对象进行排序:Arrays.sort(),Comparable <T>

假设我有一个包含对象的数组,我有一些员工(对象).他们都有:int age, double salary. 我想对这个数组进行排序,以便我的类实现Comparable <Employee>.我做了一个方法:

public int compareTo(Employee other) {
    return Double.compare(salary, other.salary);
}
Run Code Online (Sandbox Code Playgroud)

没关系,排序工作正常.但我正在排序double salary.现在我想按顺序排序int age现在呢?我做了一个方法:

public int compareAge(Employee other) {
    return Integer.compare(age, other.age);
}
Run Code Online (Sandbox Code Playgroud)

我怎么Arrays.sort()用这个呢?我希望有可能使用这两种方法 - 按工资排序,按年龄排序.谢谢你的帮助.

java arrays sorting comparable comparator

5
推荐指数
2
解决办法
3184
查看次数

Java - 具有3种相似类型的有界类型的泛型方法:String,StringBuilder,StringBuffer

我知道它根本没有意义,但这只是我的实验.有3种类型(据我所知)支持方法substring().我不想制作这样的通用方法:

public static <T extends String & StringBuilder & StringBuffer> T substr3(T str) {
        if (str.length() > 3) {
            return (T) str.substring(0, 3);
        }
        return str;
    }
Run Code Online (Sandbox Code Playgroud)

它不会像这样编译,因为您可以根据需要使用尽可能多的接口,但只能使用一个类作为有界类型.这种方法应该工作正常此3种类型:String,StringBuilder,StringBuffer但问题是:如何设置3种类型的约束类型?

java generics

5
推荐指数
1
解决办法
276
查看次数

JavaFX如何在单击鼠标时清除TextField

我在 TextField 上选择正确的操作时遇到问题。在 Java 类上:

@FXML
private TextField projectNameInput;
    
@FXML
private void clearProjectName(MouseEvent event) {

    // some if - else statements
    projectNameInput.clear();
}
Run Code Online (Sandbox Code Playgroud)

在 FXML 上,它看起来像这样:

<TextField fx:id="projectNameInput" onMouseClicked="#clearProjectName" GridPane.columnIndex="1">
Run Code Online (Sandbox Code Playgroud)

我尝试了大多数选项,在 Java 中我尝试过(作为 arg)Event、MouseEvent、ActionEvent,结合 FXMLonAction等,但没有运气。我应该选择什么样的动作,当我在 TextField 上单击鼠标按钮时它会自动清除?

java javafx

5
推荐指数
1
解决办法
3万
查看次数

Java Selenium,如何从链接WebElement获取linkText(锚)

我有一个包含由url找到的链接的WebElement。我可以通过以下方式提取网址:

element.getAttribute("href");
Run Code Online (Sandbox Code Playgroud)

但是问题是:如何提取锚点,我正在尝试像这样:

webElement.getAttribute("linkText");
Run Code Online (Sandbox Code Playgroud)

它给了我空值。我100%确信此链接具有锚点。有什么办法获得锚点吗?它更加复杂,但是示例简化的代码可能如下所示:

WebDriver driver = new FirefoxDriver();
        driver.get("http://stackoverflow.com/questions/tagged/java");
        WebElement link  = driver.findElement(By.linkText("Bicycles"));

        System.out.println(link.getAttribute("href")); // shows http://bicycles.stackexchange.com/
        System.out.println(link.getAttribute("linkText")); // shows null
Run Code Online (Sandbox Code Playgroud)

java selenium selenium-webdriver

5
推荐指数
2
解决办法
3万
查看次数

Mockito 模拟 when() 两种不同类型的泛型方法

我有两个类的通用对象Generic<T, R>

Generic<TypeA, TypeB> genericOne;
Generic<TypeB, TypeC> genericTwo;
Run Code Online (Sandbox Code Playgroud)

我必须嘲笑:

when(someObject.someMethod(Matchers.<Generic<TypeA, TypeB>>any()))
                .thenReturn(responseOne());

when(someObject.someMethod(Matchers.<Generic<TypeB, TypeC>>any()))
                .thenReturn(responseTwo());
Run Code Online (Sandbox Code Playgroud)

问题是,由于类型擦除,mockito 不会看到这两个方法调用之间的区别——它都被识别为Generic<T, R>类。

有什么办法可以区分这两种方法调用吗?

java generics mockito

5
推荐指数
1
解决办法
4067
查看次数

如何检测GitLab CI服务器上是否正在运行测试

我有一个测试,它使用配置并在gitlab CI服务器上运行的MySQL数据库(gitlab-ci.yml).我希望在本地运行时禁用该测试(它使用的是内存数据库).有没有办法检查测试是否在GitLab Ci服务器上运行?就像是:

if(isRunningOnGitlabCi()) {
  Assert.assertThat(...);
}
Run Code Online (Sandbox Code Playgroud)

也许有环境变量,我可以检查一下?

java gitlab gitlab-ci

3
推荐指数
1
解决办法
418
查看次数

针对供应商特定脚本的FlyWay + Spring Boot 2.x错误:使用1.x版发现了多个迁移

我正在尝试配置FlyWay与两个供应商一起使用-一个(H2)用于本地环境,另一个(Mysql)用于ci。

这是我的脚本补丁:

补丁

我的FlyWay bean配置:

@Bean(initMethod = "migrate")
    Flyway flyway() {
        Flyway flyway = Flyway
                .configure()
                .dataSource(dataSource(dataSourceProperties()))
                .locations("classpath:db/migration/MySQL", "classpath:db/migration/H2")
                .load();
        return flyway;
    }

    @Bean
    @Primary
    @ConfigurationProperties("spring.datasource")
    public DataSourceProperties dataSourceProperties() {
        return new DataSourceProperties();
    }

    @Bean
    @ConfigurationProperties("spring.datasource")
    public HikariDataSource dataSource(DataSourceProperties properties) {
        return properties.initializeDataSourceBuilder().type(HikariDataSource.class)
                .build();
    }
Run Code Online (Sandbox Code Playgroud)

和我的application.yml配置:

spring:
  main:
    allow-bean-definition-overriding: true
  datasource:
    driverClassName: com.mysql.cj.jdbc.Driver
    jdbc-url: jdbc:mysql://localhost:3306/messages
    username: username
    password: password
Run Code Online (Sandbox Code Playgroud)

我试图实现的目标是使flyway运行数据库供应商特定的脚本,具体取决于在数据源中设置的数据库。这是我得到的:

Caused by: org.flywaydb.core.api.FlywayException: Found more than one migration with version 1.1
Offenders:
-> C:\Projects\my-project\out\production\resources\db\specific\MySQL\V1_1__Create_table_message.sql (SQL)
-> C:\Projects\my-project\out\production\resources\db\specific\H2\V1_1__Create_table_message.sql (SQL)
Run Code Online (Sandbox Code Playgroud)

我已经尝试使用小写的供应商名称(db / migration …

java flyway spring-boot

2
推荐指数
1
解决办法
1014
查看次数

Java抛出错误并捕获NullPointerException

这对我来说没有意义.

第一个例子:

例1(好):

public static void main(String args[]){
        try {
            Exception e = null;
            throw e;
        } catch (Exception e) {
        }
Run Code Online (Sandbox Code Playgroud)

这些代码一切都很好 - 异常被抛出和捕获.

例2(坏):

public static void main(String args[]){
    try {
        Exception e = null;
        throw e;
    } catch (NullPointerException e) {
    }
}
Run Code Online (Sandbox Code Playgroud)

这将无法编译,因为catch块无法捕获NullPointerException哪个是子类Exception.它不知道会抛出什么样的异常.

java.lang.Object
    java.lang.Throwable
        java.lang.Exception  --> Thrown
            java.lang.RuntimeException
                java.lang.NullPointerException  --> Cannot catch like this
Run Code Online (Sandbox Code Playgroud)

所以让我们将异常更改为NullPointerException:

例3(好)

public static void main(String args[]) {
    try {
        NullPointerException e = null;
        throw …
Run Code Online (Sandbox Code Playgroud)

java exception nullpointerexception

1
推荐指数
1
解决办法
1480
查看次数

Mockito @Before 方法在@PostConstruct 之后调用

这是我的简化代码:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class MockitoSpringBootTest {

    @MockBean
    private MyBean myBean;


    @Before
    private void before(){
        Mockito.when(myBean.getSomeString()).thenReturn("TEST"));
    }

}

@Service
private class TestClass {

    @Autowired
    private MyBean myBean;

    @PostConstruct
    public void initialize() {
        myBean.getSomeString(); //SmartNull - method is not stubbed yet
    }

}
Run Code Online (Sandbox Code Playgroud)

我的问题是我需要存根MyBean方法,然后任何其他具有此对象自动装配的类将运行@BeforeClass方法。现在@Before方法是在@PostConstruct任何自动装配这个 bean 的类之后执行的(不止一个)。

MyBean 自动装配为模拟,但方法未存根,所以我得到:“此未存根方法调用返回的 SmartNull 对模拟:”

有没有办法在 Spring 容器初始化中设置模拟 bean 的优先级?

java spring mockito kotlin spring-boot

1
推荐指数
1
解决办法
1699
查看次数

Java Iterator作为一个类?

我被一些看似obvoius的东西所吸引,但这不适合我.我们有一个hashSet和Iterator:

Set<String> set = new HashSet<>();
Iterator it = set.iterator();
Run Code Online (Sandbox Code Playgroud)

我知道,迭代器是如何工作的,但对我来说有些奇怪:

Iterator*it = set.iterator();**
*ok,等等.Iterator是一个接口,而不是一个类.那么......?
**好吧,set是HashSet类的一个对象,它实现了接口Iterator,所以ith有一个void interator()imlemented,没什么不寻常的.

但是我们如何从Iterator接口创建Iterator对象?

java iterator

-1
推荐指数
2
解决办法
80
查看次数