Pourquoi est-javac faute sur @Override annotation
Eclipse est l'ajout de @Override annotations lorsque je mettre en œuvre les méthodes d'une interface. Eclipse semble avoir aucun problème avec cela. Et notre processus de génération automatique de Contrôle de Croisière semble avoir aucun problème avec cela. Mais quand je construire à partir de la ligne de commande, avec ant l'exécution de javac, j'obtiens cette erreur:
[javac] C:\path\project\src\com\us\MyClass.java:70: method does not override a method from its superclass
[javac] @Override
[javac] ^
[javac] 1 error
Eclipse est en cours d'exécution en vertu de la version 1.6 de Java. Le régulateur de vitesse est en cours d'exécution Java 1.5. Mon ant l'échec de la construction quelle que soit la version de Java que j'utilise.
Vous devez vous connecter pour publier un commentaire.
L' @Override annotation spec changé dans la version 1.6 de Java. Dans Java 1.5, le compilateur ne permettent pas l' @Override annotation sur la mise en œuvre de méthodes d'interface, mais en 1.6, il n'. Premier résultat de recherche, j'ai trouvé est un billet de blog ici.. Il n'a pas été bien documenté, mais il n'a changer.
Eclipse est de l'ajouter parce que votre Eclipse est réglé pour le 1.6 conformité...vous devriez essayer de garder votre construction et environnements eclipse sur la même version de Java. Il est clair pour moi par votre spécifiant le régulateur de vitesse est en cours d'exécution Java 5 sur si oui ou non il est en train de compiler en utilisant un JDK6 ou pas.
Distincte de la au-dessus de 1,5 vs 1.6 @Override annotation règles, n'oubliez pas que Eclipse dispose de son propre compilateur de mise en œuvre (pas de javac) et parfois avoir des comportements différents. Chaque fois que quelque chose compile dans Eclipse, mais pas Ant ou Maven, vous aurez besoin de trouver un moyen de faire les deux compilateurs heureux.
Je ne peux pas vraiment expliquer le problème que vous avez vu, mais il semble être lié au fait que JDK 5 ne permettra pas
@Override
sur la mise en œuvre des méthodes d'un interface, uniquement sur les méthodes de remplacement présents dans un super classe.JDK 6 permettra
@Override
sur l'un d'eux.Si votre ant l'échec de la construction, il peut être le passage d'un
source
paramètre de javac, demandant JDK 5 de la conformité.@Override balises pour la mise en œuvre de méthodes sont nouvelles pour la version 1.6 de Java. Dans Java 1.5 @Override est correcte uniquement lors du remplacement d'une méthode dans une classe de base. Lire plus ici et ici.
La réponse directe à la question "Pourquoi" une erreur est générée par javac quand @Override est utilisé dans le contexte d'une méthode mise en œuvre est en fait dans les spécifications java:
Voir http://java.sun.com/docs/books/jls/third_edition/html/interfaces.html#9.6.1.4
Mais apparemment, quelqu'un a changé d'avis pour java 1.6 et 1.5 u21...
Beaucoup de gens, y compris moi, a éclaté par cette. Voir ici pour une plus grande ALORS la discussion
Eclipse serait de pointage à la version 1.6 de Java au lieu de 1,5.
Voir ici pour la configuration de la version de java dans eclipse.
S'assurer qu'il n'existe qu'une seule définition de cette interface.
Exemple:
HttpServletRequest
C'est une interface avec des spécifications différentes selon le fournisseur.
Comparer pax-web-jetée et apache-félix-de la jetée. Ils ont des méthodes différentes.
J'ai eu le même problème lors de la construction d'un projet avec ANT. La solution à ce problème est de changer la propriété suivante à l'intérieur de la construction.fichier de propriétés:
à:
Qui a résolu le problème et le projet a compilé et déployé avec succès.