Оскільки Java8 нещодавно був випущений, і його абсолютно нові лямбдаські вирази виглядають справді крутими, мені було цікаво, чи означає це смерть класів Anonymous, до яких ми так звикли.
Я трохи досліджував це і знайшов кілька цікавих прикладів того, як вирази Lambda систематично замінюватимуть такі класи, такий метод сортування Collection, який використовував для отримання анонімного екземпляра компаратора для виконання сортування:
Collections.sort(personList, new Comparator<Person>(){
public int compare(Person p1, Person p2){
return p1.firstName.compareTo(p2.firstName);
}
});
Тепер це можна зробити за допомогою лямбда:
Collections.sort(personList, (Person p1, Person p2) -> p1.firstName.compareTo(p2.firstName));
І виглядає напрочуд лаконічно. Отже, моє запитання: чи є якась причина продовжувати використовувати ці класи в Java8 замість Lambdas?
EDIT
Це ж питання, але в зворотному напрямку, які переваги використання Lambdas замість Anonymous класів, оскільки Lambdas можна використовувати лише з інтерфейсами одного методу, чи ця нова функція є лише ярликом, який використовується лише в кількох випадках, чи це дійсно корисно?
Comparator.comparing(Person::getFirstName)
якщо getFirstName()
це був би метод повернення firstName
.