Ponieważ Java8 została niedawno wydana, a jej zupełnie nowe wyrażenia lambda wyglądają na naprawdę fajne, zastanawiałem się, czy oznacza to upadek klas Anonymous, do których byliśmy tak przyzwyczajeni.
Zbadałem trochę na ten temat i znalazłem kilka fajnych przykładów tego, jak wyrażenia lambda będą systematycznie zastępować te klasy, takie jak metoda sortowania Collection, która służyła do uzyskania anonimowej instancji komparatora w celu wykonania sortowania:
Collections.sort(personList, new Comparator<Person>(){
public int compare(Person p1, Person p2){
return p1.firstName.compareTo(p2.firstName);
}
});
Teraz można to zrobić za pomocą Lambdas:
Collections.sort(personList, (Person p1, Person p2) -> p1.firstName.compareTo(p2.firstName));
I wygląda zaskakująco zwięźle. Więc moje pytanie brzmi: czy jest jakiś powód, aby nadal używać tych klas w Javie8 zamiast Lambdas?
EDYTOWAĆ
To samo pytanie, ale w przeciwnym kierunku, jakie są korzyści z używania Lambd zamiast klas anonimowych, skoro Lambdas można używać tylko z interfejsami jednej metody, czy ta nowa funkcja jest tylko skrótem używanym tylko w kilku przypadkach, czy jest naprawdę przydatna?
Comparator.comparing(Person::getFirstName)
jeśli getFirstName()
byłaby to metoda zwracająca firstName
.