2011-02-14 12 views
15

Obtengo errores de compilación en eclipse cuando uso la anotación @Override para una clase que está implementando una interfaz.@Override error de compilación, implementando una interfaz (eclipse jdk1.6.0_23 linux)

El nivel de cumplimiento del compilador está establecido en Java 6.0.

Estoy utilizando la última versión de la versión 6.0 jdk.

Error: "El método {methodname} del tipo {classname} debe reemplazar un método superclase"

mismo código funciona bien en Mac con configuración comparable.

public interface ChannelIF { 
... 
    public boolean canSendNarrowcast(); 
    public boolean canSendBroadcast(); 
} 

public class FacebookChannel implements ChannelIF 
{ 
... 
    @Override 
    public boolean canSendNarrowcast() { return true; } 

    @Override 
    public boolean canSendBroadcast() { return true; } 
} 
+0

¿Cuál es el error de compilación completo que obtienes? – Progman

+12

Solo una conjetura. Tal vez ha comprobado solo el nivel de cumplimiento del compilador del espacio de trabajo (establecido en 6), pero su proyecto se ajusta a jdk5. –

+0

@Progman - pregunta editada para incluir la cadena de error – jsoc

Respuesta

0

Parece que las firmas de sus métodos no coinciden. Deben ser iguales, incluidas cosas como excepciones comprobadas arrojadas. Publica tu código!

+0

Ejemplo de código agregado. Nota: el código compila bien en otras configuraciones. Creo que tiene algo que ver con la versión de jdk que estoy ejecutando dentro de Linux, o algo sobre mi configuración de eclipse de Linux que simplemente no veo. – jsoc

14

Esta función solo es válida en Java 6 y versiones posteriores. Veo que es usando jdk 1.6. Eso es bueno. Causa posible: está compilando con -source 1.5. ¿Es este el caso? Si es así, ¿puedes cambiarlo a -source 1.6?

+0

Sospecho que tienes razón, pero ¿dónde verifico esto dentro del eclipse? El nivel de cumplimiento del compilador dentro de eclipse ya está configurado en 6.0 (1.6) – jsoc

+2

Para Eclipse: botón derecho en el proyecto -> Propiedades ...> Compilador de Java, luego configure como desee – M3rlino

3

En eslipse puede utilizar versiones diferentes de compiladores.

Consulte la configuración en eclipse Preferencia-> Java-> Compilador "Nivel de cumplimiento del compilador". Debe elegir "1.6".

0

Comprobar la biblioteca de tiempo de ejecución, la configuración del compilador son probablemente diferentes

Haga clic derecho sobre el nombre del proyecto, propiedades, Vía de construcción Java, Bibliotecas

Mira la versión del Sistema de Bibliotecas de JRE, más que probable está configurado en 1.5 o más bajo. biblioteca Seleccione Sistema JRE, a continuación, haga clic en Quitar Haga clic en Agregar biblioteca, seleccione Sistema JRE, Siguiente Entonces, o por defecto del espacio de trabajo, o

3

acabo de encontrar que cuando se utiliza experto que tenía que modificar también el pom.xml tener la plugin de compilador Había todos mis ajustes correctamente especificado, pero necesitaba éste:

<build> 
    <plugins> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <inherited>true</inherited> 
     <configuration> 
      <source>1.6</source> 
      <target>1.6</target> 
     </configuration> 
    </plugin> 
    </plugins> 
</build> 
0

tenía este mismo problema durante aproximadamente una hora, y luego se parecía a resolver misteriosamente en sí. Desearía saber lo que hice. Comencé con la configuración del espacio de trabajo configurada para 1.6, sin querer tener la configuración del proyecto configurada en compatibilidad 1.5. Descubrí esto y cambié la configuración del compilador del proyecto a 1.6, que resolvió algunos errores, pero no el problema de @Override para las interfaces. Alguna combinación de lo siguiente lo solucionó:

  1. Cambiando la jre de jdk a la jre que Eclipse instaló de manera personalizada (o alguien, no era yo).
  2. Desactivando las configuraciones específicas del proyecto en la sección del compilador, y también haciendo clic en Restablecer a valores predeterminados, en las configuraciones del proyecto y del espacio de trabajo para el compilador.
  3. Salir de Eclipse y volver a ejecutarlo como Administrador (copié Eclipse en Archivos de programa en Windows desde un archivo .zip, no desde un instalador, y creo que no puede cambiar sus archivos de configuración siendo un elemento secundario de esa carpeta sin ejecutar como administrador, pero podría estar completamente equivocado).

Un compañero aparentemente resuelto el problema a través de desinstalación completa y volver a instalar de todos java/eclipse componentes relacionados: http://p2p.wrox.com/book-beginning-android-application-development/87299-override-errors-despite-1-6-a.html

1

Por lo tanto, no dejaba de tener este problema, y ​​después de correr a través de las soluciones anteriores un par de veces, al ver que mi versión de Java estaba configurada en 1.7 por completo, sin utilizar Maven, y que acababa de salir y reiniciar Eclipse un par de veces como lo sugirió @jdowdell, después de lo cual, parece que funcionará hasta la próxima vez que implemente uno de estos . Me di cuenta de que cuando reiniciaba Eclipse, me estaba pidiendo que guardara mis archivos y me di cuenta de que mis interfaces no se habían guardado, por lo que el método original, el que se reemplazó, no existía en el disco. Y esta es la razón por la que cerrar y reiniciar Eclipse soluciona el problema.

tl; dr: compruebe que se guardan todos sus archivos.

+0

Esto me ayudó .. –

4

Yo también tengo un problema y simplemente resuelto. Cambie el "Nivel de cumplimiento del compilador" a 1.6 en Proyecto-> haga clic derecho-> propiedades-> compilador de Java.

Cuestiones relacionadas