Java 什么';这是IDE的好处;自动生成的@override注释?

Java 什么';这是IDE的好处;自动生成的@override注释?,java,performance,Java,Performance,我使用的是eclipse,当我使用快捷方式生成覆盖实现时,上面有一个覆盖注释,我使用的是JDK 6,这没关系,但在JDK 5下,这个注释会导致错误,所以我想问一下,这个注释是否完全无用?编译器会使用此注释进行某种优化吗?注释非常有价值,因为它可以清楚地表明新方法是否覆盖父类的方法。例如,您可能认为您正在重写,但您拼错了方法名(或者被重写的方法的签名在此期间发生了更改)。这不是没有用的。它帮助读者理解代码,并帮助编写者避免错误 也就是说,jdk5和jdk6在使用@Overrides时表现不同,因此

我使用的是eclipse,当我使用快捷方式生成覆盖实现时,上面有一个覆盖注释,我使用的是JDK 6,这没关系,但在JDK 5下,这个注释会导致错误,所以我想问一下,这个注释是否完全无用?编译器会使用此注释进行某种优化吗?

注释非常有价值,因为它可以清楚地表明新方法是否覆盖父类的方法。例如,您可能认为您正在重写,但您拼错了方法名(或者被重写的方法的签名在此期间发生了更改)。

这不是没有用的。它帮助读者理解代码,并帮助编写者避免错误


也就是说,jdk5和jdk6在使用
@Override
s时表现不同,因此如果它们导致问题,只需删除它们即可。它们在功能上完全没有区别。

它的目的是让编译器能够告诉您什么时候该方法实际上没有重写超类方法。例如,假设您拼错了名称,编译器将使用anotation警告您该方法没有覆盖任何内容,因此您将能够捕获错误,而不是运行程序,不理解为什么您的方法从未被调用。

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


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

正如其他人所指出的那样,
@override
注释实际上是一个编译器指令,它指示
javac
如果用
@override
注释的方法实际上没有覆盖其父类中的方法,就会发出尖叫声(例如,您实际上正在重载,因为您决定更改方法签名或拼写错误方法名称)

JDK 5下,直接从接口实现方法不被认为覆盖了该方法,如果用
@Override
注释,则被认为是错误


部分由于用户反馈,这是一个非常令人困惑的行为,<强> JDK 6 改变了这个行为,并认为从一个接口中注释一个方法是正确的。