有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

javafx在Java中错误地转换为lambda表达式

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

我尝试将转换工具应用于事件,当ComboBoxis 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) 个答案

  1. # 1 楼答案

    编辑

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

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

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