2014-05-18 10 views
15

Apprendimento di Java 8 Lambdas e chiedersi come il compilatore sa quale metodo in Comparator utilizzare per l'espressione lambda? Non sembra essere un'interfaccia SAM? Ha 2 metodi astratti:FunctionalInterface Comparator ha 2 metodi astratti

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

risposta

25

equals() non è un metodo astratto. Questo metodo ha la precedenza su Object.equals(Object) e solo per l'interfaccia di Comparator è possibile avere javadoc collegato al metodo, spiegando in che modo i comparatori dovrebbero implementare equals().

Vedere il javadoc of FunctionalInterface:

Se un'interfaccia dichiara un metodo astratto ignorando uno dei metodi pubblici di java.lang.Object, che anche non conta verso conteggio metodo astratto dell'interfaccia dal momento che qualsiasi attuazione del l'interfaccia avrà un'implementazione da java.lang.Object o altrove.

Problemi correlati