如何在Java中用lambda替换匿名

yukashima huksay:

我已经有了这段代码,但是IntelliJ告诉我用lambda代替匿名,但我不知道如何。谁能帮我这个?这是我的代码:

soundVolume.valueProperty().addListener(new ChangeListener<Number>() {
    public void changed(ObservableValue<? extends Number> ov,
                     Number old_val, Number new_val) {
        main.setSoundVolume(new_val.doubleValue());
        main.getMediaPlayer().setVolume(main.getSoundVolume());
    }
}); 
Davide Lorenzo MARINO:

通常,类似这样的内容:

methodUsingYourClass(new YourClass() {
    public void uniqueMethod(Type1 parameter1, Type2 parameter2) {
        // body of function
    }
});

被替换为

methodUsingYourClass((Type1 parameter1, Type2 parameter2) -> {
    // body of function
});

对于您的特定代码:

soundVolume.valueProperty().addListener(
       (ObservableValue<? extends Number> ov,
                 Number old_val, Number new_val) -> {
    main.setSoundVolume(new_val.doubleValue());
    main.getMediaPlayer().setVolume(main.getSoundVolume());
});

请注意,仅当匿名类具有一个方法时,才可以用lambda替换匿名类。如果匿名类具有更多方法,则无法进行替换。

oracle文档中

上一节“匿名类”介绍了如何在不给基类命名的情况下实现它。尽管这通常比命名类更简洁,但是对于仅具有一个方法的类,即使是匿名类也显得有些繁琐。Lambda表达式使您可以更紧凑地表达单方法类的实例

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章