Cuidado con @Override

Palabras clave:
Tiempo aproximado: < 1 min.
Acabo de leer una curiosidad sobre la anotación @Override 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 @Override, 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… 🙂