Поскольку Java8 была недавно выпущена и ее новые лямбда-выражения выглядят действительно круто, мне было интересно, означает ли это кончину анонимных классов, к которым мы так привыкли.
Я немного исследовал это и нашел несколько классных примеров того, как лямбда-выражения будут систематически заменять эти классы, например метод сортировки Collection, который используется для получения анонимного экземпляра Comparator для выполнения сортировки:
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?
РЕДАКТИРОВАТЬ
Тот же вопрос, но в противоположном направлении, каковы преимущества использования Lambdas вместо анонимных классов, поскольку Lambdas можно использовать только с интерфейсами с одним методом, эта новая функция только ярлык используется только в нескольких случаях или действительно полезна?
Comparator.comparing(Person::getFirstName)
if getFirstName()
будет возвращающим методом firstName
.