2014-05-18 10 views
15

Nauka języka Java 8 Lambdas i po prostu zastanawiasz się, w jaki sposób kompilator wie, której metody w Komparatorze użyć do wyrażenia lambda? Wygląda na to, że nie jest to interfejs SAM? Ma 2 abstrakcyjne metody:FunctionalInterface Comparator ma 2 metody abstrakcyjne.

@FunctionalInterface 
public interface Comparator<T> { 
    int compare(T o1, T o2); 
    boolean equals(Object obj); 
} 

Odpowiedz

25

equals() nie jest metodą abstrakcyjną. Ta metoda zastępuje Object.equals(Object) i jest dostępna tylko dla interfejsu Komparatora, aby można było dołączyć do metody javadoc, wyjaśniając, w jaki sposób kompilatory powinny implementować equals().

Zobacz javadoc of FunctionalInterface:

Jeśli interfejs deklaruje abstrakcyjnej metody unieważniając jedną z metod publicznych java.lang.Object, że również nie liczą się do abstrakcyjnego Interfejs metody liczenia od każdej realizacji programu interfejs będzie miał implementację z java.lang.Object lub w innym miejscu.

Powiązane problemy