138 Stimmen

Warum beschwert sich Eclipse über @Override bei Schnittstellenmethoden?

Ich habe ein bestehendes Projekt, das Folgendes verwendet @Override bei Methoden, die überschrieben werden Schnittstelle Methoden und nicht die Methoden der Oberklasse. Ich kann dies im Code nicht ändern, aber ich möchte, dass Eclpse aufhört, sich über die Annotation zu beschweren, da ich noch mit Maven bauen kann.

Wie kann ich diesen Fehler deaktivieren?

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

0 Stimmen

Aber es scheint, dass die Quelle auf Java 6 ausgerichtet ist?

0 Stimmen

In der Tat. Java 5 war eine späte Anforderung für die Mac-Unterstützung.

272voto

erickson Punkte 256579

Die Verwendung des @Override für Methoden, die die von einer Schnittstelle deklarierten Methoden implementieren, ist erst ab Java 6 gültig. In Java 5 ist das ein Fehler.

Vergewissern Sie sich, dass Ihre IDE-Projekte so eingerichtet sind, dass sie eine Java 6 JRE verwenden, und dass die "Quellkompatibilität" auf 1.6 oder höher eingestellt ist:

  1. Öffnen Sie den Dialog Fenster > Voreinstellungen
  2. Wechseln Sie zu Java > Compiler.
  3. Setzen Sie dort die "Compiler-Konformitätsstufe" auf 1.6.

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


Aktualisierung:

Der Fehler unter Java 5 tritt nicht nur bei Eclipse auf; mit javac direkt von der Befehlszeile aus eingeben, erhalten Sie denselben Fehler. Es handelt sich nicht um gültigen Java 5-Quellcode.

Sie können jedoch die -target 1.5 Option zu JDK 6's javac die eine Klassendatei der Java 5-Version aus dem Java 6-Quellcode erzeugt.

0 Stimmen

Nein, das wird es nicht. Es wird eine Fehlermeldung "javac: source release 1.6 requires target release 1.6" ausgegeben.

9 Stimmen

Nein, das wird es nicht. Es wird eine kompilierte Klassendatei erzeugt. Der Fehler tritt nur auf, wenn Sie die Option -source 1.6 angeben, die nicht notwendig ist, damit das Programm funktioniert.

0 Stimmen

Da ich sowieso manuell baue, kann ich den Quellcode einfach auf 1.6 belassen. Ich konnte keine gemischte Konfiguration zum Laufen bringen, und das scheint am einfachsten zu sein.

12voto

gdoumenc Punkte 529

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

1 Stimmen

Treffer! Sie hatten Recht, meine Projektfacette hatte Vorrang vor den globalen Compliance-Einstellungen. Danke!

9voto

Henry Punkte 91

Projektspezifische Einstellungen können aktiviert werden. Wählen Sie Ihr Projekt Project > Properties > Java Compiler , uncheck die Enable project specific settings oder ändern Jdk 1.6 und vor allem nicht zu vergessen die entsprechenden JRE .
Falls es nicht funktioniert, entfernen Sie Ihr Projekt aus Eclipse, löschen Sie .settings folders , .project , .classpath Dateien. clean and build the project, import it back into eclipse and then reset your Java compiler. Clean and build your project und Sonnenfinsternis. Bei mir hat es funktioniert

8voto

akarnokd Punkte 66673

Sie könnten die Compiler-Einstellungen so ändern, dass sie die Java 6-Syntax akzeptieren, aber Java 5-Ausgaben erzeugen (soweit ich mich erinnere). Und setzen Sie die "Kompatibilität der generierten Klassendateien" etwas niedriger, wenn dies für Ihre Laufzeit erforderlich ist. Update : Ich habe Eclipse überprüft, aber es beschwert sich, wenn ich die Quellkompatibilität auf 1.6 und die Klassenkompatibilität auf 1.5 einstelle. Wenn 1.6 nicht erlaubt ist, kommentiere ich normalerweise die beanstandeten @Override-Annotationen im Quellcode manuell aus (was in Ihrem Fall nicht hilft).

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

0 Stimmen

Können Sie dazu etwas sagen?

0 Stimmen

Sie befindet sich auf der gleichen Seite wie die von erickson angegebene.

0 Stimmen

Das Projekt ist mehrere GB groß. Ein einfaches "Kopieren" ist nicht einmal praktisch :/

1voto

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X