Error en los métodos con anotaciones @Override en Android (Java)
Cuando estamos desarrollando una aplicación es habitual (y muy recomendable) tener el código en un sistema de control de versiones como podría ser Subversión o Git. De esta forma podremos colaborar con otros programadores en el desarrollo de la aplicación. También podremos seguir programando desde diferentes ordenadores y continuar por donde lo hemos dejado con solamente descargarnos la última versión que hayamos subido.
En el caso de Android (Java), me he encontrado con un error bastante peculiar a la hora de importar un proyecto en Eclipse. El error en cuestión es el siguiente:
The method onClick(View) of type LoginFragment must override a superclassmethod |
Este es un extracto de la clase donde me aparecía el error:
public class LoginFragment extends Fragment implements OnClickListener @Override public void onClick(View v) { [...] } |
El error indica que al añadir la anotación @Override necesito sobrescribir un método de la clase padre (OnClickListener).
El problema es que el método onClick es un método de una interface y con el compilador de Java 1.5 esto no es posible ya que solo se pueden sobrescribir métodos de una superclase utilizando la anotación @Override.
En Java 1.6 si que está permitido, y lo hacemos incluyendo la anotación @Override.
En conclusión, estamos utilizando diferentes versiones de Java en cada entorno. En el entorno que nos da problemas debemos cambiar el compilador de Java. Para ello vamos a Window > Preferences y en la columna izquierda seleccionamos Java > Compiler. Solo debemos cambiar el «Compiler compliance level» a la versión 1.6 (o superior).
Hay un par de cosas que no entiendo del post:
«El error indica que al añadir la anotación @Override necesito sobrescribir un método de la clase padre (OnClickListener).»
La clase padre no sería ‘Fragment’? (extends Fragment)
«El problema es que el método onClick es un método de una interface y con el compilador de Java 1.5 esto no es posible ya que solo se pueden sobrescribir métodos de una superclase utilizando la anotación @Override.
En Java 1.6 si que está permitido, y lo hacemos incluyendo la anotación @Override.»
no se pueden sobreescribir métodos de interfaces en java 1.5, solo de superclases, es eso lo que quiere decir el párrafo?
Tienes razón en lo primero, la clase padre sería Fragment.
Lo segundo que dices no es correcto, una interface no contiene definiciones de métodos que puedan ser sobreescritos. Lo que creo que quiere decir es simplemente que para las versiones 1.5 hacia abajo del compilador no se puede sobreescribir usando @override