yuk*_*say 48 java lambda anonymous
我有这个代码,但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());
}
});
Run Code Online (Sandbox Code Playgroud)
Dav*_*INO 80
通常,类似的东西:
methodUsingYourClass(new YourClass() {
public void uniqueMethod(Type1 parameter1, Type2 parameter2) {
// body of function
}
});
Run Code Online (Sandbox Code Playgroud)
被替换为
methodUsingYourClass((Type1 parameter1, Type2 parameter2) -> {
// body of function
});
Run Code Online (Sandbox Code Playgroud)
对于您的特定代码:
soundVolume.valueProperty().addListener(
(ObservableValue<? extends Number> ov,
Number old_val, Number new_val) -> {
main.setSoundVolume(new_val.doubleValue());
main.getMediaPlayer().setVolume(main.getSoundVolume());
});
Run Code Online (Sandbox Code Playgroud)
请注意,仅当匿名类具有一个方法时,才可以使用lambda替换匿名类.如果匿名类有更多方法,则无法进行替换.
从oracle文档:
上一节"匿名类"向您展示了如何在不给它命名的情况下实现基类.虽然这通常比命名类更简洁,但对于只有一个方法的类,即使是匿名类也似乎有点过分和繁琐.Lambda表达式允许您更紧凑地表达单方法类的实例.
Per*_*uss 75
为什么不让IntelliJ告诉你?将光标放在声明上,然后按Alt + Enter(或选择+在Mac上输入)以显示意图弹出窗口.选择"替换为lambda"并观看转换后的代码......
为了使代码清晰,还可以使用lambda声明一个变量,然后将该变量传递给addListener方法。例如
soundVolume.valueProperty().addListener(listener);
ChangeListener<Number> listener = (observable, oldValue, newValue) -> { ... };