在Java

时间:2016-10-23 19:35:15

标签: java javafx lambda expression changelistener

我目前在Netbeans IDE中使用JavaFx,但Eclipse的行为可能相同。当我使用for-loop时,通常会冒犯我将语句转换为lambda表达式。有时我会发现它有用,直到它给出了错误的表达。

ComboBox is changed中的所选项目

时,我尝试将转化工具应用于该事件
command.valueProperty().addListener(new ChangeListener<String>() {
    @Override 
    public void changed(ObservableValue ov, String t, String t1) {                
        System.out.println(t1);              
    }    
});

转换结果为:

command.valueProperty().addListener((ObservableValue ov, String t, String t1) -> {
    System.out.println(t1);    
});

看起来好一点,但错误:

  

没有为addListener找到合适的方法((Observabl [...] 1);})

当我保留原始代码时,它就像一个魅力。为什么我的IDE为我提供了不正确的转换?如何修复功能方法才能正常工作?

1 个答案:

答案 0 :(得分:1)

修改

我刚刚在IntelliJ上尝试了你的例子(抱歉,我没有安装NetBeans)并且它生成了正确的代码并运行良好:

new ChoiceBox<String>()
    .valueProperty()
    .addListener((ov, t, t1) -> System.out.println(t1));

您的原始代码不完整,ObservableValue需要一个类型参数,即:ObservableValue<? extends String>。如果您不提供,则编译器无法推断出正确的类型