In generale, qualcosa di simile:
methodUsingYourClass(new YourClass() {
public void uniqueMethod(Type1 parameter1, Type2 parameter2) {
// body of function
}
});
è sostituito con
methodUsingYourClass((Type1 parameter1, Type2 parameter2) -> {
// body of function
});
Per il vostro codice specifico:
soundVolume.valueProperty().addListener(
(ObservableValue<? extends Number> ov,
Number old_val, Number new_val) -> {
main.setSoundVolume(new_val.doubleValue());
main.getMediaPlayer().setVolume(main.getSoundVolume());
});
Nota la sostituzione di una classe anonima con lambda è possibile solo se la classe anonima ha un metodo. Se la classe anonima ha più metodi, la sostituzione non è possibile.
Da oracle documentation:
La sezione precedente, le classi anonime, vi mostra come implementare una classe di base senza dargli un nome. Sebbene questo sia spesso più conciso di una classe denominata, per le classi con un solo metodo, anche una classe anonima sembra un po 'eccessiva e ingombrante. Le espressioni lambda consentono di esprimere istanze di classi a metodo singolo in modo più compatto.
fonte
2016-06-08 07:10:32
Voi sapete che questo è solo un suggerimento, giusto? – Kai