在 Java 中错误地转换为 lambda 表达式
Erroneous conversion to lambda expression in Java
我目前在 Netbeans IDE 中使用 JavaFx,但 Eclipse 的行为可能相同。当我使用 for-loop
时,将语句转换为 lambda 表达式通常会冒犯我。有时我发现它很有用,直到它给出错误的表达。
我尝试将转换工具应用于事件,当A 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 提供了不正确的转换?如何修复函数式方法使其正常工作?
编辑
我刚刚在 IntelliJ 上尝试了您的示例(抱歉,我没有安装 NetBeans),它生成了正确的代码并且运行良好:
new ChoiceBox<String>()
.valueProperty()
.addListener((ov, t, t1) -> System.out.println(t1));
您的原始代码不完整,ObservableValue
需要一个类型参数,即:ObservableValue<? extends String>
。如果您不提供,编译器将无法推断出正确的类型
我目前在 Netbeans IDE 中使用 JavaFx,但 Eclipse 的行为可能相同。当我使用 for-loop
时,将语句转换为 lambda 表达式通常会冒犯我。有时我发现它很有用,直到它给出错误的表达。
我尝试将转换工具应用于事件,当A 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 提供了不正确的转换?如何修复函数式方法使其正常工作?
编辑
我刚刚在 IntelliJ 上尝试了您的示例(抱歉,我没有安装 NetBeans),它生成了正确的代码并且运行良好:
new ChoiceBox<String>()
.valueProperty()
.addListener((ov, t, t1) -> System.out.println(t1));
您的原始代码不完整,ObservableValue
需要一个类型参数,即:ObservableValue<? extends String>
。如果您不提供,编译器将无法推断出正确的类型