Vì Java8 đã được phát hành gần đây và các biểu thức lambda hoàn toàn mới của nó trông thực sự tuyệt vời, tôi đã tự hỏi liệu điều này có nghĩa là sự sụp đổ của các lớp Anonymous mà chúng ta đã từng quen thuộc hay không.
Tôi đã nghiên cứu một chút về điều này và tìm thấy một số ví dụ thú vị về cách các biểu thức Lambda sẽ thay thế các lớp đó một cách có hệ thống, chẳng hạn như phương thức sắp xếp của Bộ sưu tập, được sử dụng để lấy một phiên bản Ẩn danh của Bộ so sánh để thực hiện sắp xếp:
Collections.sort(personList, new Comparator<Person>(){
public int compare(Person p1, Person p2){
return p1.firstName.compareTo(p2.firstName);
}
});
Bây giờ có thể được thực hiện bằng Lambdas:
Collections.sort(personList, (Person p1, Person p2) -> p1.firstName.compareTo(p2.firstName));
Và có vẻ ngắn gọn đáng ngạc nhiên. Vì vậy, câu hỏi của tôi là, có lý do gì để tiếp tục sử dụng các lớp đó trong Java8 thay vì Lambdas không?
BIÊN TẬP
Cùng một câu hỏi nhưng ở chiều ngược lại, lợi ích của việc sử dụng Lambdas thay vì các lớp Anonymous là gì, vì Lambdas chỉ có thể được sử dụng với các giao diện phương thức duy nhất, liệu tính năng mới này chỉ là một phím tắt chỉ được sử dụng trong một số trường hợp hay nó thực sự hữu ích?
Comparator.comparing(Person::getFirstName)
if getFirstName()
sẽ là một phương thức trả về firstName
.