Warum beschwert sich Eclipse über @Override bei Schnittstellenmethoden?

134

Ich habe ein vorhandenes Projekt, das @OverrideMethoden verwendet, die Schnittstellenmethoden überschreiben , anstatt Methoden der Oberklasse. Ich kann dies im Code nicht ändern, aber ich möchte, dass Eclpse sich nicht mehr über die Annotation beschwert, da ich immer noch mit Maven bauen kann.

Wie würde ich diesen Fehler deaktivieren?

Hinweis: Aufgrund der Projektanforderungen muss ich für Java 1.5 kompilieren.

Stefan Kendall
quelle
Aber es scheint, dass die Quelle auf Java 6 ausgerichtet ist?
Akarnokd
Tatsächlich. Java 5 war eine späte Anforderung für die Mac-Unterstützung.
Stefan Kendall

Antworten:

268

Die Verwendung der @OverrideAnnotation für Methoden, die die von einer Schnittstelle deklarierten implementieren, ist nur ab Java 6 gültig. Es ist ein Fehler in Java 5.

Stellen Sie sicher, dass Ihre IDE-Projekte für die Verwendung einer Java 6-JRE eingerichtet sind und dass die "Quellkompatibilität" auf 1.6 oder höher eingestellt ist:

  1. Öffnen Sie das Dialogfeld Fenster> Einstellungen
  2. Navigieren Sie zu Java> Compiler.
  3. Stellen Sie dort die "Compiler-Konformitätsstufe" auf 1.6 ein.

Denken Sie daran, dass Eclipse diese globalen Einstellungen für ein bestimmtes Projekt überschreiben kann. Überprüfen Sie daher auch diese.


Aktualisieren:

Der Fehler unter Java 5 liegt nicht nur bei Eclipse. Wenn Sie javacdirekt von der Befehlszeile aus verwenden, erhalten Sie den gleichen Fehler. Es ist kein gültiger Java 5-Quellcode.

Sie können die -target 1.5Option jedoch für JDK 6 angeben javac, wodurch eine Java 5-Versionsklassendatei aus dem Java 6-Quellcode erstellt wird.

erickson
quelle
Nein, das wird es nicht. Es wird eine Fehlermeldung "javac: Quellversion 1.6 erfordert Zielversion 1.6" ausgegeben.
Michael Borgwardt
9
Nein, das wird es nicht. Es wird eine kompilierte Klassendatei erstellt. Dieser Fehler wird nur ausgegeben, wenn Sie die Option -source 1.6 angeben, die nicht erforderlich ist, damit dies funktioniert.
Erickson
Weißt du, da ich sowieso manuell baue, kann ich die Quellenebene einfach bei 1,6 belassen. Ich konnte keine gemischte Konfiguration zum Laufen bringen, und das scheint am einfachsten zu sein.
Stefan Kendall
@erickson funktioniert das Downgrade von -target -source auch für 1.7 bis 1.6? stackoverflow.com/q/8869869/632951
Pacerier
Dies scheint mit dem 1.8 JDK nicht zu funktionieren. -Quelle 1.6 -Ziel 1.5 sagt: javac: Quellversion 1.6 erfordert Zielversion 1.6
Don Hatch
39

Gehen Sie wie folgt vor:

Projekt -> Eigenschaften -> Java-Compiler ->

  • Projektspezifische Einstellungen aktivieren - 'Ja'
  • Compiler-Konformität - 1.6
  • generierte Klassendateien und Quellkompatibilität - 1.5
mitko
quelle
Danke - wusste nicht, dass jedes Projekt auch seine eigenen Einstellungen hat
whostolemyhat
2
In meinem Fall musste ich diese Option deaktivieren.
Muten Roshi
12

Überprüfen Sie auch, ob das Projekt eine Facette hat. Die Java-Version kann dort überschrieben werden.

gdoumenc
quelle
1
Ergebnis! Sie hatten Recht, meine Projektfacette hat die globalen Compliance-Einstellungen überschrieben. Vielen Dank!
Bpawlowski
9

Projektspezifische Einstellungen können aktiviert werden. Wählen Sie Ihr Projekt aus Project > Properties > Java Compiler, uncheckdas Enable project specific settingsoder ändern Sie Jdk 1.6und vergessen Sie nicht das entsprechende JRE.
Incase es nicht funktioniert, Ihr Projekt von Eclipse entfernen, löschen .settings folders, .project, .classpathDateien. clean and build the project, import it back into eclipse and then reset your Java compiler. Clean and build your projectund Sonnenfinsternis. Es hat bei mir funktioniert

Henry
quelle
7

Sie können die Compilereinstellungen ändern, um die Java 6-Syntax zu akzeptieren, aber eine Java 5-Ausgabe generieren (wie ich mich erinnere). Stellen Sie die Kompatibilität mit generierten Klassendateien etwas niedriger ein, wenn dies für Ihre Laufzeit erforderlich ist. Aktualisieren : Ich habe Eclipse überprüft, aber es beschwert sich, wenn ich die Quellkompatibilität auf 1.6 und die Klassenkompatibilität auf 1.5 setze. Wenn 1.6 nicht erlaubt ist, kommentiere ich normalerweise die beleidigenden @ Override-Anmerkungen in der Quelle manuell aus (was Ihrem Fall nicht hilft).

Update2: Wenn Sie nur manuell erstellen, können Sie ein kleines Programm schreiben, das das ursprüngliche Projekt in ein neues kopiert, @ Override-Annotationen aus den Java-Quellen entfernt und einfach in Eclipse auf Projekt bereinigen klickt.

akarnokd
quelle
Können Sie Einzelheiten angeben?
Stefan Kendall
Es befindet sich auf derselben Seite wie von erickson angegeben.
Akarnokd
Das Projekt ist mehrere GB groß. Eine einfache "Kopie" ist nicht einmal praktisch. : /
Stefan Kendall
In diesem Fall müssen Sie um eine Änderungserlaubnis bitten. Oder erstellen Sie einen Zweig für die 1.5-kompatiblen Quellen und korrigieren Sie die Java-Dateien manuell.
akarnokd
1

Sie können auch Retroweaver ausprobieren, um die Java5-Version aus Java6-Klassen zu erstellen.


quelle
1

Verwenden Sie Eclipse, um alle Instanzen von "@Override" zu suchen und zu ersetzen (zu entfernen). Fügen Sie dann die Nicht-Schnittstellen-Überschreibungen mit "Aufräumen" wieder hinzu.

Schritte:

  1. Wählen Sie die Projekte oder Ordner aus, die Ihre Quelldateien enthalten.
  2. Gehen Sie zu "Suchen> Suchen ..." (Strg-H), um den Suchdialog aufzurufen.
  3. Gehen Sie zur Registerkarte "Dateisuche".
  4. Geben Sie "@Override" unter "Text enthalten" und "* .java" unter "Dateinamenmuster" ein. Klicken Sie auf "Ersetzen ..." und dann auf "OK", um alle Instanzen von "@Override" zu entfernen.
  5. Gehen Sie zu "Fenster> Einstellungen> Java> Codestil> Bereinigen" und erstellen Sie ein neues Profil.
  6. Bearbeiten Sie das Profil und deaktivieren Sie alles außer "Fehlender Code> Fehlende Anmerkungen hinzufügen> @Override". Stellen Sie sicher, dass "Implementierungen von Schnittstellenmethoden" deaktiviert ist.
  7. Wählen Sie die Projekte oder Ordner aus, die Ihre Quelldateien enthalten.
  8. Wählen Sie "Quelle> Bereinigen ..." (Alt + Umschalt + s, dann u) und dann "Fertig stellen", um die Überschreibungen außerhalb der Schnittstelle wieder hinzuzufügen.
Peter Tseng
quelle
0

Ich habe Ihr Problem verstanden, ändern Sie Ihr JDK von Ihrem JDK auf größer als 1,5

Gen.
quelle
0

Durch die Konfiguration, dass die IDE-Projekte für die Verwendung von Java 6 JRE oder höher eingerichtet sind, wird der Eclipse-Fehler manchmal nicht behoben. Für mich hat ein Neustart der Eclipe IDE geholfen.

IstaLibera
quelle
0

Selbst nachdem ich die Compiler-Konformitätseinstellung von der Windows-Registerkarte auf 1.6 oder 1.7 geändert hatte, dann Einstellungen, dann Java, dann Compiler und das Festlegen der Compiler-Konformität, hatte ich immer noch dieses Problem. Die Idee ist, dass wir den Projektordner aufrufen, mit der rechten Maustaste auf Java klicken und die Compiler-Konformität auf 1.6 oder höher einstellen müssen. Das hat bei mir funktioniert.

Ranjan
quelle