我目前在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为我提供了不正确的转换?如何修复功能方法才能正常工作?
答案 0 :(得分:1)
我刚刚在IntelliJ上尝试了你的例子(抱歉,我没有安装NetBeans)并且它生成了正确的代码并运行良好:
new ChoiceBox<String>()
.valueProperty()
.addListener((ov, t, t1) -> System.out.println(t1));
您的原始代码不完整,ObservableValue
需要一个类型参数,即:ObservableValue<? extends String>
。如果您不提供,则编译器无法推断出正确的类型