Es gibt nichts in die Java-Sprache die zwischen JDK5 und 6. Das einzige, was hinzugefügt wurde entfernt war, wie gesagt wurde, war die @Override
Annotation zulässige auf Interface-Methoden sind - keine Schlüsselwörter. Daher haben Sie, glaube ich, nur noch Bibliotheksunterschiede als einzige Ursache für das Brechen von Änderungen.
Diese existieren sogar in der Kern-API; In einer ungewöhnlichen Form von rückwärtskompatibilitätsbrechendem Vergnügen änderten sie die Signatur einiger Methoden auf der ExecutorService
Schnittstelle. Dies lag daran, dass die generischen Signaturen der Methoden zu restriktiv waren. Dies war ein reiner Bibliothekswechsel (obwohl ein Teil von java.util
, eine hübsche Kernbibliothek); nichts mit Modifikationen auf Sprachniveau zu tun haben.
Zum Beispiel from JDK5:
<T> T invokeAny(Collection<Callable<T>> tasks)
to JDK6:
<T> T invokeAny(Collection<? extends Callable<T>> tasks)
Das bedeutet, dass jedes Programm, das Code enthalten diese Schnittstelle in JDK5 Umsetzung würde nicht gegen JDK6 zusammengestellt. Ein Snippet ist einfach zu erstellen. Lass deine IDE einfach eine leere Implementierung der JDK5-Schnittstelle erstellen und baue dann gegen JDK6.
Hinweis:, dass der Platzhalter hinzugefügt wurde, weil die vorherige Version nicht einen Parameter wie List<MyCallable<String>>
angenommen haben (das heißt die Sammlung von einigen Unterklasse von abrufbaren getippt), während die neuere Version der Fall ist.
Warum ändern Sie nicht einfach die Compiler-Ebene auf Eclipse ?? –
@Diago, aus der Frage "Dies ist sicher, dass der Compiler-Level korrekt eingestellt ist". –
Es gibt nichts in der Sprache, das zwischen JDK5 und 6 entfernt wurde. Das einzige, was hinzugefügt wurde, war, wie bereits gesagt wurde, die Override-Annotation in den Interface-Methoden - daher kein Schlüsselwort.Daher sind Sie mit Bibliothek Unterschiede fest, ich fürchte –