Eclipse es la adición de @Override anotaciones cuando me implementar los métodos de una interfaz. Eclipse parece tener ningún problema con esto. Y nuestro proceso de generación automática de Control de Crucero parece tener ningún problema con esto. Pero cuando voy a construir desde la línea de comandos, con ant ejecución javac, me sale este error:

[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 se ejecuta con Java 1.6. El Control de crucero está ejecutando Java 1.5. Mi hormiga de la compilación falla, independientemente de qué versión de Java debo usar.

InformationsquelleAutor skiphoppy | 2010-02-25

8 Comentarios

  1. 99

    La @Override anotación spec cambiado en Java 1.6. En Java 1.5, el compilador no permite la @Override anotación en la interfaz implementado métodos, pero en el 1.6 lo hace. Primer resultado de la búsqueda que he encontrado es un blog aquí.. Es no estaba bien documentado, pero se hizo el cambio.

    Eclipse es la adición ya que el Eclipse se establece para el 1.6 de cumplimiento. Usted debe tratar de mantener su construcción y entornos eclipse en la misma versión de Java. Es claro para mí por su especificación de Control de Crucero está ejecutando Java 5 sobre si es o no es una compilación de uso de otra JDK6 o no.

    Separada de la superior a 1,5 vs 1.6 @Override anotación reglas, recuerda que Eclipse tiene su propio compilador aplicación (no javac) y en ocasiones tienen un comportamiento diferente. Cada vez que algo se compila en Eclipse, pero no Ant o Maven, usted tendrá que encontrar una manera de hacer que los dos compiladores feliz.

    ¿Por qué es javac fallando en @Override anotación

    • Esta es una gran respuesta; yo tengo una cosa que añadir: si por cualquier razón usted desea permanecer en el JDK 1.5, usted sólo tiene que actualizar a la última versión de actualización. Yo estoy usando la u21 y compila estos tipos de @Anula la multa justa.
    • Cool – voy a añadir a mi respuesta.
    • He instalado el JDK 1.5u21 y 1.5u22 y javac no permitir que @Override en la interfaz de las implementaciones de método en cualquiera de liberación. A continuación, MyRunnable implementa java.lang.Ejecutables : c:/Java/jdk/1.5.0_21/bin/javac MyRunnable.java MyRunnable.java:3: método no reemplaza un método de su superclase @Override public void run() { } ^ 1 error no es mencionado en la notas de la versión, tampoco.
    • Comprobar la corrección de la respuesta. El comportamiento observado por Kevin debe haber sido Eclipse, no javac.
    • Yo también tuve el mismo problema y he cambiado la versión de JRE 1.6 a través de Maven, Ejecute la Configuración. Gracias mucho. +1ed.
    • ¿tienes alguna notas de la versión de que confirme su estado de cuenta? Como djb escribe, no puede ser confirmado.

  2. 16

    Realmente no puedo explicar el problema que estamos viendo, pero parece estar relacionada con el hecho de que JDK 5 no va a permitir que @Override en métodos implementados de una interfaz, sólo en los métodos sobrescritos presente en un super clase.

    JDK 6 permitirá @Override en cualquiera de ellos.

    Si su ant build falla puede estar pasando un source parámetro para javac, pidiendo JDK 5 de cumplimiento.

  3. 3

    La respuesta directa a la pregunta «por Qué» se produce un error por javac cuando @Override se utiliza en el contexto de una implementación del método es, en realidad, en las especificaciones de java:

    «La razón de esto es que un hormigón de la clase que implementa una interfaz necesariamente va a reemplazar todos los métodos de la interfaz, independientemente de la @Override anotación, y por lo tanto sería confuso tener la semántica de esta anotación interactuar con las normas para la implementación de interfaces.»

    Ver http://java.sun.com/docs/books/jls/third_edition/html/interfaces.html#9.6.1.4

    Pero al parecer alguien cambió su mente para java 1.6 y 1.5 u21…

  4. 3

    @Override etiquetas para la aplicación de métodos nuevos para Java 1.6. En Java 1.5 @Override sólo es correcta cuando se reemplaza un método de una clase base. Leer más aquí y aquí.

  5. 0

    Eclipse podría estar apuntando a la versión 1.6 de Java en lugar de 1.5.
    Ver aquí para la configuración de la versión de java en eclipse.

  6. 0

    Asegurarse de que no hay una única definición de la interfaz.

    Ejemplo:
    HttpServletRequest

    Esta es una interfaz con diferentes especificaciones dependiendo del proveedor.

    Comparar pax-web-jetty y apache-felix-jetty. Tienen diferentes métodos.

  7. 0

    He tenido el mismo problema cuando la construcción de un proyecto con ANT. La solución al problema fue cambiar la siguiente propiedad en el interior de la construcción.propiedades de archivo:

    javac.compiler=org.eclipse.jdt.core.JDTCompilerAdapter

    a:

    javac.compiler=modern

    Que resuelto el problema y el proyecto, que se puso compilado e implementado con éxito.

Dejar respuesta

Please enter your comment!
Please enter your name here