Nói chung, một cái gì đó như thế:
methodUsingYourClass(new YourClass() {
public void uniqueMethod(Type1 parameter1, Type2 parameter2) {
// body of function
}
});
được thay thế bằng
methodUsingYourClass((Type1 parameter1, Type2 parameter2) -> {
// body of function
});
Đối với mã cụ thể của bạn:
soundVolume.valueProperty().addListener(
(ObservableValue<? extends Number> ov,
Number old_val, Number new_val) -> {
main.setSoundVolume(new_val.doubleValue());
main.getMediaPlayer().setVolume(main.getSoundVolume());
});
Lưu ý việc thay thế một lớp ẩn danh bằng lambda chỉ có thể nếu lớp ẩn danh có một phương pháp. Nếu lớp ẩn danh có nhiều phương thức thì không thể thay thế được.
Từ oracle documentation:
Phần trước, Lớp học Anonymous, cho bạn thấy làm thế nào để thực hiện một lớp cơ sở mà không cho nó một cái tên. Mặc dù điều này thường ngắn gọn hơn một lớp được đặt tên, cho các lớp chỉ có một phương thức, thậm chí một lớp ẩn danh có vẻ hơi quá mức và cồng kềnh. Biểu thức Lambda cho phép bạn thể hiện các cá thể của các lớp đơn phương nhỏ gọn hơn.
Nguồn
2016-06-08 07:10:32
Bạn biết rằng đây chỉ là một gợi ý, phải không? – Kai