首页 > 代码库 > JDK 1.5 与 1.6 中的@Override

JDK 1.5 与 1.6 中的@Override

遇到一个奇怪的问题:最近在维护一个老项目,添加了一点新功能,结果在本地打包上传到生产环境,报java.lang.UnsupportedClassVersionError:  Bad version number in .class file。

    当然一看到这个错误我就知道是因为JDK的版本不一致。我查看开发环境打包的JDK是1.6,而生产环境是JDK 1.5;我就安装了一个JDK 1.5,重新用1.5打包,打包成功,上传到生产环境。结果还是一样的异常。这我就纳闷了:这期间我折腾了很久,把JDK 1.6 卸载了,怕他有影响,结果还是没用。

   后来我一想,是不是新添加的代码在1.5中不兼容,实现接口的方法上也加上了@Override注解(IDE eclipse自动帮助加上的);我把实现接口方法上的注解去掉用JDK 1.6 打包上传到生产环境,竟然正常了!

   原来JDK 1.6 和 1.6@Override上在有这么一点细微的差别:在方法的继承(类的继承)上使用@Override都是没问题,但在方法的实现(接口的实现)上使用@Override要在1.6或更高的版本上才可以。如果没有使用什么特别的功能JDK一般还是向后兼容的。

   @Override促使我们在编译期发现错误,让我们明确的知道自己要实现或覆盖的方法,使代码更规范。




JDK 1.5 与 1.6 中的@Override