Nicht die Implementierung aller Methoden einer Schnittstelle
Ich habe versucht, die Reproduktion der code unten auf eclipse. Ich erhalte eine Fehlermeldung sagt mir, dass ich haben, um alle geerbten Methoden (weil Comparator ist ein interface).
Art
new Comparator(){}
implementieren muss, um die geerbte abstrakte MethodeComparator.reversed()
.
Gibt es viele Methoden, und die einzige, die ich überschreiben möchten, ist vergleichen. Muss ich implementieren, alle anderen Methoden oder gibt es eine Möglichkeit zu geben, die ich nicht brauchen, um Sie umzusetzen?
Ich verstehen, dass ich es zu tun habe, weil von der vertraglichen Beschaffenheit der Oberfläche, aber was ist, wenn ich nur ändern müssen, eine Methode?
static Map sortByValue(Map map) {
List list = new LinkedList(map.entrySet());
Collections.sort(list, new Comparator() {
public int compare(Object o1, Object o2) {
return ((Comparable) ((Map.Entry) (o1)).getValue())
.compareTo(((Map.Entry) (o2)).getValue());
}
});
Map result = new LinkedHashMap();
for (Iterator it = list.iterator(); it.hasNext();) {
Map.Entry entry = (Map.Entry)it.next();
result.put(entry.getKey(), entry.getValue());
}
return result;
}
BEARBEITEN
Gelöst, indem die compliance-Niveau zu java8 in eclipse luna. Danke!
- Nicht sicher, was Sie reden. Für die Kompilierung in Ordnung.
- möglich, Duplikat der nicht die Implementierung aller Methoden des interface. ist es möglich?
- Sind Sie sicher, dass Sie, sollten Sie nicht verwenden, jede Art von Generika überhaupt in deinem code? Ist das für Java 1.4?
- Sie erkennen, dass OP bereits verknüpft mit der Frage in seinem post?
- Ich bekomme eine Fehlermeldung in eclipse: Die Art new Comparator(){} implementieren muss, um die geerbte abstrakte Methode Komparator.Umgekehrt() dann habe ich, wenn ich das Update habe ich viele Funktionen Hinzugefügt
- Das ist eine wilde Vermutung: ich glaube, Sie sind mit Java8 in einem pre-Java8-Eclipse (d.h. pre-Luna). Damit Eclipse nicht weiß, dass all die neuen Komparator-Verfahren, wie
thenComparing
haben einedefault
Umsetzung. - Ich weiß nicht genau, ich bin ziemlich neu in java. Ich bin mit java 8
- eigentlich bin ich mit eclipse luna und java8 und das Update vorgeschlagen, gibt mir die Standard-Implementierungen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Comparator.reversed
war eingeführt in Java 1.8 und es ist ein Standard-Methode d.h. eine Methode, die Sie nicht überschreiben.Wie es scheint, Sie haben Ihre compliance level auf pre Java 1.8 (seit Eclipse Sie fragt, zu überschreiben
reversed
), während die mit Java 1.8 API (seitComparator
hat einereversed
- Methode).Stellen Sie sicher, dass Sie entweder ändern Sie Ihr API 1.7 oder ändern Sie Ihre compliance-Niveau von 1,8. (Die letztere option benötigt Eclipse Luna oder besser).
Mehr auf Eclipse-compliance level:
Was ist "compiler compliance level" in Eclipse?
Dies ist eine Art von wild guess: ich glaube, Sie sind mit Java 8 in einem pre-Java 8-Eclipse (d.h. pre-Luna). Auf diese Weise, Eclipse weiß nicht, dass all die neuen Komparator-Verfahren, wie
thenComparing
haben eine default-Implementierung.In Java 7, Komparator hat nur die Methode
compare
, während in Java 8 hat eine ganze Menge mehr Methoden, von denen alle haben eine default-Implementierung, die direkt in die Schnittstelle und müssen nicht umgesetzt werden in eine Unterklasse.Ich schlage vor, Sie wechseln auf die neueste version von Eclipse, die Luna. Alternativ können Sie auch installieren Sie einen patch für Eclipse Kepler, aber der Wechsel zu "Luna" ist sicherlich besser.
Den Zweck einer Schnittstelle ist zu verpflichten, die Durchführung von Sprach-interface alle Methoden hier aufgelistet. Jetzt gibt es ein paar Möglichkeiten, um etwa nicht die Implementierung aller Methoden.
Einer abstrakten Klasse kann besser geeignet sein für das, was Sie tun. Obwohl man könnte, nur
.super()
alles.Haben Sie in ein Eclipse-Fehler:
https://bugs.eclipse.org/bugs/show_bug.cgi?id=390889
Grundsätzlich, JAVA 1.8 eingeführt, eine Marke neue Methode Komparator.Umgekehrt(). Und da haben Sie ein JAVA 1.7 oder früher-code, JAVA-1.8 nicht die Methode und nicht kompiliert werden kann.