javafx在Java中错误地转换为lambda表达式
我目前在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);
});
这看起来好一点,但却是错误的:
no suitable method found for addListener((Observabl[...]1); })
当我保留原始代码时,它就像一个符咒。为什么IDE为我提供了不正确的转换?如何确定函数方法才能很好地工作
# 1 楼答案
编辑
我刚刚在IntelliJ上尝试了您的示例(抱歉,我没有安装NetBeans),它生成了正确的代码,运行良好:
您的原始代码不完整,
ObservableValue
需要一个类型参数,即:ObservableValue<? extends String>
。如果不提供,编译器将无法推断正确的类型