¿Por qué Eclipse se queja de @Override en los métodos de interfaz?

134

Tengo un proyecto existente que utiliza @Overridemétodos que anulan los métodos de interfaz , en lugar de métodos de superclase. No puedo alterar esto en el código, pero me gustaría que Eclpse deje de quejarse de la anotación, ya que todavía puedo construir con Maven.

¿Cómo haría para deshabilitar este error?

Nota: Debido a los requisitos del proyecto, necesito compilar para Java 1.5.

Stefan Kendall
fuente
Pero parece que la fuente está dirigida a Java 6?
akarnokd
En efecto. Java 5 era un requisito tardío para el soporte de mac.
Stefan Kendall

Respuestas:

268

El uso de la @Overrideanotación en métodos que implementan los declarados por una interfaz solo es válido desde Java 6 en adelante. Es un error en Java 5.

Asegúrese de que sus proyectos IDE estén configurados para usar un Java 6 JRE y que la "compatibilidad de origen" esté establecida en 1.6 o superior:

  1. Abra el cuadro de diálogo Ventana> Preferencias
  2. Vaya a Java> Compilador.
  3. Allí, establezca el "Nivel de cumplimiento del compilador" en 1.6.

Recuerde que Eclipse puede anular estas configuraciones globales para un proyecto específico, así que verifíquelas también.


Actualizar:

El error en Java 5 no es solo con Eclipse; usando javacdirectamente desde la línea de comando le dará el mismo error. No es un código fuente Java 5 válido.

Sin embargo, puede especificar la -target 1.5opción para JDK 6 javac, que producirá un archivo de clase de versión de Java 5 a partir del código fuente de Java 6.

erickson
fuente
No, no lo hará. Producirá un mensaje de error "javac: la versión 1.6 de origen requiere la versión 1.6 de destino".
Michael Borgwardt
9
No, no lo hará. Producirá un archivo de clase compilado. Solo da ese error si especifica la opción -source 1.6, que no es necesaria para que esto funcione.
erickson
Sabes, como construyo manualmente de todos modos, puedo dejar el nivel de origen en 1.6. No pude hacer funcionar ningún tipo de configuración mixta, y esto parece más simple.
Stefan Kendall
@erickson, ¿la rebaja -target -source también funciona para 1.7 a 1.6? stackoverflow.com/q/8869869/632951
Pacerier
Esto no parece funcionar con el 1.8 JDK. -source 1.6 -target 1.5 dice: javac: la versión de origen 1.6 requiere la versión de destino 1.6
Don Hatch
39

Haz lo siguiente:

Proyecto -> Propiedades -> compilador java ->

  • Habilitar configuraciones específicas del proyecto - 'sí'
  • Cumplimiento del compilador - 1.6
  • archivos de clase generados y compatibilidad de origen - 1.5
mitko
fuente
Gracias - no me di cuenta de que cada proyecto también tiene su propia configuración
whostolemyhat
2
en mi caso necesitaba deshabilitar esta opción.
Muten Roshi
12

Compruebe también si el proyecto tiene faceta. La versión de Java puede ser anulada allí.

gdoumenc
fuente
1
¡Puntuación! Tenías razón, mi faceta del proyecto estaba anulando la configuración de cumplimiento global. ¡Gracias!
bpawlowski
9

Se pueden habilitar configuraciones específicas del proyecto. Seleccione su proyecto Project > Properties > Java Compiler, uncheckel Enable project specific settingso cambio Jdk 1.6y arriba sin olvidar el correspondiente JRE.
En caso que no lo hace el trabajo, retire su proyecto de eclipse, eliminar .settings folders, .project, .classpatharchivos. clean and build the project, import it back into eclipse and then reset your Java compiler. Clean and build your projecty eclipse. Funciono para mi

Enrique
fuente
7

Puede cambiar la configuración del compilador para aceptar la sintaxis de Java 6 pero generar la salida de Java 5 (como recuerdo). Y configure la "Compatibilidad de archivos de clase generados" un poco más baja si es necesario para su tiempo de ejecución. Actualización : Verifiqué Eclipse, pero se queja si configuro la compatibilidad de origen en 1.6 y la compatibilidad de clase en 1.5. Si 1.6 no está permitido, generalmente comento manualmente las anotaciones ofensivas de @Override en la fuente (lo que no ayuda a su caso).

Actualización 2: si solo realiza la compilación manual, podría escribir un pequeño programa que copie el proyecto original en uno nuevo, elimine las anotaciones de @Override de las fuentes de Java y simplemente presione Limpiar proyecto en Eclipse.

akarnokd
fuente
¿Me puede dar algún detalle?
Stefan Kendall
Está en la misma página según lo indicado por erickson.
akarnokd
El proyecto es de varios GB de gran tamaño. Una simple "copia" ni siquiera es práctica. : /
Stefan Kendall
En este caso, deberá solicitar permiso de cambio. O cree una rama para las fuentes compatibles 1.5 y repare manualmente los archivos java.
akarnokd
1

También puede probar Retroweaver para crear la versión Java5 a partir de clases Java6.


fuente
1

Use Eclipse para buscar y reemplazar (eliminar) todas las instancias de "@Override". Luego, vuelva a agregar las anulaciones que no sean de la interfaz con "Limpiar".

Pasos:

  1. Seleccione los proyectos o carpetas que contienen sus archivos fuente.
  2. Vaya a "Buscar> Buscar ..." (Ctrl-H) para que aparezca el cuadro de diálogo Buscar.
  3. Vaya a la pestaña "Búsqueda de archivos".
  4. Ingrese "@Override" en "Contenido de texto" y "* .java" en "Patrones de nombre de archivo". Haga clic en "Reemplazar ...", luego en "Aceptar", para eliminar todas las instancias de "@Override".
  5. Vaya a "Ventana> Preferencias> Java> Estilo de código> Limpiar" y cree un nuevo perfil.
  6. Edite el perfil y desmarque todo excepto "Código faltante> Agregar anotaciones faltantes> @Override". Asegúrese de que "Implementaciones de métodos de interfaz" esté desmarcado.
  7. Seleccione los proyectos o carpetas que contienen sus archivos fuente.
  8. Seleccione "Fuente> Limpiar ..." (Alt + Shift + s, luego u), luego "Finalizar" para volver a agregar las anulaciones que no son de interfaz.
Peter Tseng
fuente
0

Comprendí tu problema, cambia tu jdk de tu jdk a más de 1.5

Gen
fuente
0

Al configurar que los proyectos IDE estén configurados para usar un Java 6 JRE o superior, a veces no se elimina el error de eclipse. Para mí, fue de ayuda reiniciar el Eclipe IDE.

IstaLibera
fuente
0

Incluso después de cambiar la configuración de cumplimiento del compilador a 1.6 o 1.7 desde la pestaña de Windows, luego las preferencias, luego Java, luego el compilador y establecer el cumplimiento del compilador, todavía tenía este problema. La idea es que debemos ir a la carpeta del proyecto, hacer clic derecho, Java y establecer el cumplimiento del compilador en 1.6 o superior. Esto funcionó para mí.

Ranjan
fuente