Dokładna definicja „funkcjonalnego interfejsu” w Javie 8
Niedawno zacząłem eksplorować Javę 8 i nie do końca rozumiem pojęcie „funkcjonalnego interfejsu”, który jest niezbędny do implementacji wyrażeń lambda w Javie. Tam jestdość obszerny przewodnik do funkcji lambda w Javie, ale utknąłemrozdział, który podaje definicję koncepcji interfejsów funkcjonalnych. Definicja brzmi:
Dokładniej, interfejs funkcjonalny jest zdefiniowany jako dowolny interfejs, który ma dokładnie jedną metodę abstrakcyjną.
Następnie przechodzi do przykładów, z których jeden jestComparator
berło:
public interface Comparator<T> {
int compare(T o1, T o2);
boolean equals(Object obj);
}
Udało mi się przetestować, czy mogę użyć funkcji lambda zamiast argumentu Komparator i działa (tj.Collections.sort(list, (a, b) -> a-b)
).
Ale w interfejsie komparatora obacompare
iequals
metody są abstrakcyjne, co oznacza, że madwie abstrakcyjne metody. Jak to działa, jeśli definicja wymaga interfejsudokładnie jedna abstrakcyjna metoda? Czego mi tu brakuje?