2014-05-18 4 views
15

Java 8 Lambdas lernen und nur fragen, wie der Compiler weiß, welche Methode in Comparator für den Lambda-Ausdruck zu verwenden? Es scheint nicht eine SAM-Schnittstelle zu sein? Es verfügt über 2 abstrakte Methoden:FunctionalInterface Comparator hat 2 abstrakte Methoden

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

Antwort

25

equals() ist keine abstrakte Methode. Diese Methode überschreibt Object.equals(Object) und ist nur für die Comparator-Schnittstelle verfügbar, damit javadoc an die Methode angehängt werden kann, und erläutert, wie Komparatoren equals() implementieren sollten.

Siehe javadoc of FunctionalInterface:

Wenn eine Schnittstelle eine abstrakte Methode überschreibt einen der öffentlichen Methoden der java.lang.Object erklärt, das auch zählt nicht in Richtung der abstrakten Methode gräflichen Schnittstelle, da jede Umsetzung der Schnittstelle wird eine Implementierung von java.lang.Object oder anderswo haben.

Verwandte Themen