2010-09-01 22 views
9

Estoy usando JDK1.6. Cuando implemente una interfaz y en la clase de implementación, si doy @override antes de los nombres de mi función, Eclipse arroja un error de compilación. es decir, el código siguiente está mal según Eclipse.anotación @override en JDK 1.6

public class SomeListener implements ServletContextListener { 
    @Override 
    public void contextDestroyed(ServletContextEvent arg0) { 
     // code 
    } 
    /* other overridden methods here */ 
} 

Si quito @Override anotación, luego el código compila bien. ¿Significa que JDK1.6 ya no requiere que marquemos la anotación @override?

+1

Qué, específicamente, es el eclipse de error que da? – nos

+1

¿Está absolutamente seguro de que está anulando el método y no lo está sobrecargando? –

+0

Mensaje de error de Eclipse: El método contextDestroyed (ServletContextEvent) de tipo OgnlListener debe anular un método de superclase – Veera

Respuesta

27

Probablemente necesite establecer el nivel de cumplimiento del compilador en eclipse. Esto se puede encontrar en Ventana-> Preferencias-> Java-> Compilador

Si las preferencias del compilador aún están configuradas en 1.5, el compilador quitará la anotación.

Editar: También verifique el nivel de cumplimiento del compilador por proyecto si lo ha configurado de forma predeterminada.

+0

+1: Acabo de quemarme con esto. Aparentemente, uno de mis compañeros de trabajo que usa Eclipse tiene su proyecto establecido en 1.6, a pesar de que Maven establece la versión del compilador en 1.5 (y yo uso m2e para importarlo como proyecto de Maven ...). – Powerlord

+0

En mi caso, fue porque en pom.xml, para maven build, el plugin maven-compiler-plugin se configuró para trabajar con 1.5 versión java source y target. Cambiando los valores en que los siguientes fijo: org.apache.maven.plugins maven-compilador-plugin 2.3.2 1,6 1,6

0

JDK1.6 definitivamente lo admite. No estoy seguro de por qué tendrías problemas.

¿Qué error estás viendo? Lo único que puedo pensar es asegurarme de que está utilizando el JDK correcto en la configuración de su proyecto. ¿Tal vez estás compilando contra un JDK antiguo?

+0

Esto debería ser un comentario de la pregunta. –

0

No se sigue utilizando la anotación @Override. Debería comprobar que el método contextDestroyed está realmente presente en la interfaz ServletContextListener y comprobar el paquete importado para esta interfaz.

0

Suena como su compilador está configurado para Java 5, cuando @Override en las interfaces no estaba permitido.

2

La configuración del Compilador Java puede estar en varios lugares según la configuración que elija, Una forma es Ventana-> Preferencias-> Compilador Java->, cámbiela a 1.6 mínimo, si se configuró en alguna versión anterior . Otra forma es hacer clic con el botón derecho en Proyecto-> Propiedades-> Compilador Java -> Cumplimiento de JDK -> Seleccionar JDK1.6 como mínimo, haga clic en aplicar.

Después de realizar los cambios, deje que el proyecto se construya, genere y tome los cambios en efecto.

Si ninguna de las opciones anteriores funciona, intente agregar rt.jar a la ruta de clases, se solucionará el problema.

1

La anotación @Override ha cambiado en la versión de Java 1.6. En Java 1.5, el compilador no permitió la anotación @Override en los métodos de interfaz implementados, desde 1.6 lo hace.

Java Compiler

Debe cambiar la versión del compilador Java en las propiedades del proyecto -> Java Compiler

Cuestiones relacionadas