Pourquoi Eclipse se plaint-il de @Override sur les méthodes d'interface?

134

J'ai un projet existant qui utilise des @Overrideméthodes qui remplacent les méthodes d' interface , plutôt que des méthodes de superclasse. Je ne peux pas modifier cela dans le code, mais j'aimerais qu'Eclpse arrête de se plaindre de l'annotation, car je peux toujours construire avec Maven.

Comment procéder pour désactiver cette erreur?

Remarque: en raison des exigences du projet, je dois compiler pour Java 1.5.

Stefan Kendall
la source
Mais il semble que la source soit ciblée sur Java 6?
akarnokd le
En effet. Java 5 était une exigence tardive pour le support mac.
Stefan Kendall

Réponses:

268

L'utilisation de l' @Overrideannotation sur les méthodes qui implémentent celles déclarées par une interface n'est valide qu'à partir de Java 6. C'est une erreur dans Java 5.

Assurez-vous que vos projets IDE sont configurés pour utiliser un JRE Java 6 et que la "compatibilité source" est définie sur 1.6 ou plus:

  1. Ouvrez la boîte de dialogue Fenêtre> Préférences
  2. Accédez à Java> Compilateur.
  3. Là, définissez le «niveau de conformité du compilateur» sur 1,6.

N'oubliez pas qu'Eclipse peut remplacer ces paramètres globaux pour un projet spécifique, alors vérifiez-les également.


Mettre à jour:

L'erreur sous Java 5 ne concerne pas uniquement Eclipse; utiliser javacdirectement à partir de la ligne de commande vous donnera la même erreur. Ce n'est pas un code source Java 5 valide.

Cependant, vous pouvez spécifier l' -target 1.5option pour JDK 6 javac, qui produira un fichier de classe de version Java 5 à partir du code source de Java 6.

Erickson
la source
Non, ce ne sera pas le cas. Il produira un message d'erreur "javac: source version 1.6 requiert la version cible 1.6".
Michael Borgwardt
9
Non, ce ne sera pas le cas. Il produira un fichier de classe compilé. Il ne donne cette erreur que si vous spécifiez l'option -source 1.6, ce qui n'est pas nécessaire pour que cela fonctionne.
erickson
Vous savez, puisque je construis manuellement de toute façon, je peux simplement laisser le niveau source à 1.6. Je ne pouvais pas faire fonctionner aucune sorte de configuration mixte, et cela semble le plus simple.
Stefan Kendall
@erickson la rétrogradation -target -source fonctionne-t-elle aussi pour la version 1.7 à 1.6? stackoverflow.com/q/8869869/632951
Pacerier
Cela ne semble pas fonctionner avec le 1.8 JDK. -source 1.6 -target 1.5 dit: javac: la version source 1.6 nécessite la version cible 1.6
Don Hatch
39

Procédez comme suit:

Projet -> Propriétés -> compilateur java ->

  • Activer les paramètres spécifiques au projet - «oui»
  • Conformité du compilateur - 1.6
  • fichiers de classe générés et compatibilité des sources - 1.5
Mitko
la source
Merci - je ne savais pas que chaque projet avait également ses propres paramètres
whostolemyhat
2
dans mon cas, je devais désactiver cette option.
Muten Roshi
12

Vérifiez également si le projet a une facette. La version java peut y être remplacée.

gdoumenc
la source
1
But! Vous aviez raison, ma facette de projet remplaçait les paramètres de conformité globaux. Merci!
bpawlowski
9

Les paramètres spécifiques au projet peuvent être activés. Sélectionnez votre projet Project > Properties > Java Compiler, uncheckle Enable project specific settingsou changez Jdk 1.6et au dessus sans oublier le correspondant JRE.
Incase il ne fonctionne pas, retirez votre projet Eclipse, supprimer .settings folders, .project, les .classpathfichiers. clean and build the project, import it back into eclipse and then reset your Java compiler. Clean and build your projectet éclipse. Ça a marché pour moi

Henri
la source
7

Vous pouvez modifier les paramètres du compilateur pour accepter la syntaxe Java 6 mais générer une sortie Java 5 (comme je me souviens). Et définissez la "Compatibilité des fichiers de classe générés" un peu plus bas si nécessaire par votre runtime. Mise à jour : j'ai vérifié Eclipse, mais il se plaint si je règle la compatibilité source sur 1.6 et la compatibilité de classe sur 1.5. Si 1.6 n'est pas autorisé, je commente généralement manuellement les annotations @Override incriminées dans la source (ce qui n'aide pas votre cas).

Update2: Si vous ne faites que la construction manuelle, vous pouvez écrire un petit programme qui copie le projet d'origine dans un nouveau, supprime les annotations @Override des sources java et vous appuyez simplement sur Nettoyer le projet dans Eclipse.

Akarnokd
la source
Pouvez-vous fournir des détails?
Stefan Kendall
C'est sur la même page que celle indiquée par erickson.
akarnokd le
Le projet fait plusieurs Go. Une simple «copie» n'est même pas pratique. : /
Stefan Kendall
Dans ce cas, vous devrez demander une autorisation de modification. Ou créez une branche pour les sources compatibles 1.5 et corrigez manuellement les fichiers java.
akarnokd
1

Vous pouvez également essayer Retroweaver pour créer la version Java5 à partir des classes Java6.


la source
1

Utilisez Eclipse pour rechercher et remplacer (supprimer) toutes les instances de "@Override". Puis rajoutez les remplacements non liés à l'interface en utilisant "Clean Up".

Pas:

  1. Sélectionnez les projets ou dossiers contenant vos fichiers source.
  2. Allez dans "Rechercher> Rechercher ..." (Ctrl-H) pour faire apparaître la boîte de dialogue Rechercher.
  3. Allez dans l'onglet "Recherche de fichiers".
  4. Entrez "@Override" dans "Containing text" et "* .java" dans "File name patterns". Cliquez sur "Remplacer ...", puis sur "OK", pour supprimer toutes les instances de "@Override".
  5. Allez dans "Fenêtre> Préférences> Java> Style de code> Nettoyer" et créez un nouveau profil.
  6. Modifiez le profil et décochez tout sauf "Code manquant> Ajouter des annotations manquantes> @Override". Assurez-vous que «Implémentations des méthodes d'interface» n'est pas cochée.
  7. Sélectionnez les projets ou dossiers contenant vos fichiers source.
  8. Sélectionnez "Source> Nettoyer ..." (Alt + Maj + s, puis u), puis "Terminer" pour rajouter les remplacements non liés à l'interface.
Peter Tseng
la source
0

J'ai compris votre problème, changez votre jdk de votre jdk à plus de 1.5

Gen
la source
0

En configurant que les projets IDE sont configurés pour utiliser un JRE Java 6 ou supérieur, cela ne supprime parfois pas l'erreur d'éclipse. Pour moi, un redémarrage de l'IDE Eclipe m'a aidé.

IstaLibera
la source
0

Même après avoir changé le paramètre de conformité du compilateur à 1.6 ou 1.7 à partir de l'onglet Windows, puis prefernces, puis java, puis compilateur et en définissant la conformité du compilateur, j'avais toujours ce problème. L'idée est que nous devons aller dans le dossier du projet, faire un clic droit, Java et définir la conformité du compilateur sur 1.6 ou plus. Cela a fonctionné pour moi.

Ranjan
la source