2010-03-15 132 views
4

我使用eclipse,当我使用快捷方式来生成覆盖实现,那里有一个覆盖注释,我使用JDK 6,这是没问题的,但在JDK 5下,这个注释会导致错误,所以我想问,如果这个注释是完全无用的?编译器会使用这个注释来做某种优化吗?IDE的自动生成的@override注释有什么好处?

回答

3

正如其他人所指出的那样,@Override注释是一个真正的编译器指令,指示javac尖叫如果与@Override注释的方法实际上并不在它的父类覆盖的方法(例如,你实际上是因为你决定改变方法签名或者拼错方法名称)。

JDK 5,直接实现从界面的方法是不考虑重写该方法,如果标注了@Override被认为是一个错误。

在某种程度上,由于用户的反馈,这是一个非常混乱的行为,JDK 6改变这种行为,并认为这是正确标注你从一个接口@Override实现的方法。

+0

是的,仅当实现接口方法时才会出现该错误。 – Sawyer 2010-03-15 14:51:58

3

该注释非常有价值,因为它会使新方法确实或不覆盖父类的方法。例如,你可能会认为你重写了,但是你拼错了方法名(或者重写的方法的签名在此期间改变了)。

3

这不是无用的。它有助于读者理解代码和作者以避免错误。

也就是说,JDK 5和JDK 6的行为与@Override不同,因此如果它们导致问题,请将其删除。他们绝对没有功能上的差异。

4

它的目的是让编译器能够告诉你何时该方法实际上并不覆盖超类方法。例如,假设拼错了名称,编译器会提示您该方法没有覆盖任何内容,因此您将能够捕获错误,而不是运行程序,也不理解为什么您的方法永远不会获取调用。

2

针对您将要部署到的JDK编译代码。

问题在于,注解对于从版本6中的接口中定义的基类和方法重写方法有效,但仅针对版本5中的重写方法。因此,在接口中定义的方法上的@override将导致您的在JDK错误5