Error en los métodos con anotaciones @Override en Android (Java)

septiembre 26, 2012

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).

Tags ; , , , , , , , ,

2 comentarios

    Javi Oct 01, 2012

    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?

    Responder
    Jn_duke Mar 19, 2013

    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

    Responder

Responde a Jn_duke Cancelar la respuesta

Los comentarios son moderados y se utiliza rel="nofollow" para los enlaces.