Cuidado con @Override

Acabo de leer una curiosidad sobre la anotación de la que resulta que hay que tener especial cuidado en el caso de que no usemos el mismo JDK en nuestros entornso de desarrollo y los de despliegue.

Resulta que si implementamos una interfaz y anotamos en la implementación uno de los métodos implementados con , el compilador de JDK 6 no se quejará mientras que sí lo hará el de JDK 5.



public interface MyInterface {

public void f();

}

public class MyClass implements MyInterface {

@Override
public void f() {
// TODO Auto-generated method stub

}

}

Que conste que lo he probado fuera de Eclipse (¡¡sí, sí, he salido a la linea de comandos!!) y que el resultado es el esperado. Al ejecutar javac MyInterface.java y javac -cp . MyClass.java con JDK 1.6.0_11 no obtengo error alguno, sin embargo, cuando lo hago con JDK 1.5.0_12 obtengo “method does not override a method from its superclass”.

La verdad, a mi me parece que debería haberse quedado como en JDK 5 puesto que “override” significa “invalidar” y justamente eso es lo que se hace al sobrescribir un método: invalidar la implementación de la superclase. Pero bueno, habrá que guardarlo en esa lista de incongruencias peligrosas a tener en cuenta en los despliegues… 🙂

Tagged: