IDE自动生成的@override注解有什么好处?

4

我正在使用 Eclipse,当我使用快捷方式生成覆盖实现时,会出现一个覆盖注释,我正在使用 JDK 6,这是没问题的,但在 JDK 5 下,这个注释会导致错误。因此,我想问一下,这个注释完全没有用吗?编译器是否会使用这个注释进行某种优化?

5个回答

4

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


3

注解非常有价值,因为它将清晰地表明新方法是否覆盖了父类的方法。例如,您可能认为自己正在进行覆盖,但实际上您拼错了方法名(或被覆盖的方法的签名已经发生了变化)。


3

这并不是无用的。它有助于读者理解代码,也能帮助作者避免错误。

话虽如此,JDK 5和JDK 6在使用@Override时会有所不同,如果它们引起问题,只需将其删除即可。它们在功能上没有任何区别。


3
正如其他人所指出的,@Override注释实际上是一个编译器指令,它告诉javac如果带有@Override注释的方法没有真正重写其父类中的方法(例如,您实际上是进行重载,因为您决定更改方法签名或拼错了方法名称),那么就会发出警告。
JDK 5中,直接从接口实现方法不被视为覆盖该方法,如果使用@Override进行注释,则被视为错误。
由于用户反馈这种行为非常令人困惑,JDK 6更改了这种行为,并认为用@Override注释实现的接口方法是正确的。

是的,只有在实现接口方法时才会出现该错误。 - Sawyer

2

编译代码时要针对您将部署的JDK进行编译。

问题在于,在6版本中,注释适用于从基类继承的重写方法和接口中定义的方法,但仅适用于5版本中重写方法。因此,在接口中定义的方法上使用@override将导致JDK 5中的错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接