在 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>。如果您不提供,编译器将无法推断出正确的类型