使用Java的@Override注释的最佳实践是什么?为什么?

用@Override注释标记每个被重写的方法似乎有点过分。是否有某些编程情况需要使用@Override,而其他情况不应该使用@Override?


当前回答

我到处都用它。 关于标记方法的工作,我让Eclipse替我做,所以不需要额外的工作。

我对持续重构非常虔诚....所以,我会利用每一件小事让它进行得更顺利。

其他回答

我每次都用。它提供了更多的信息,当我在一年后重新访问代码时,我可以快速弄清楚发生了什么,而我已经忘记了我第一次想的是什么。

对于我来说,@Override确保我有正确的方法签名。如果我放入注释,而方法拼写不正确,那么编译器会报错,让我知道有什么地方出错了。

为了从编译器检查中获益,你应该总是使用Override注释。但是不要忘记Java Compiler 1.5在覆盖接口方法时不允许这个注释。您只能使用它来重写类方法(抽象与否)。

有些ide(如Eclipse)甚至配置了Java 1.6运行时或更高版本,它们保持与Java 1.5的一致性,并且不允许像上面描述的那样使用@override。要避免这种行为,您必须转到:项目属性->Java编译器->勾选“启用项目特定设置”->选择“编译器遵从级别”= 6.0或更高。

我喜欢在每次独立重写方法时使用这个注释,如果基是一个接口或类。

这可以帮助您避免一些典型的错误,例如当您认为您正在重写事件处理程序时,然后您没有看到发生任何事情。假设你想给某个UI组件添加一个事件监听器:

someUIComponent.addMouseListener(new MouseAdapter(){
  public void mouseEntered() {
     ...do something...
  }
});

上面的代码编译并运行,但是如果你将鼠标移动到someUIComponent内部,“do something”代码将提示运行,因为实际上你没有覆盖基本方法mouseEntered(MouseEvent ev)。您只需创建一个新的无参数方法mouseEntered()。如果您使用了@Override注释,那么您将看到一个编译错误,并且没有浪费时间思考为什么事件处理程序没有运行。

最佳实践是始终使用它(或让IDE为您填充它们)

@Override有用性是检测父类中没有向下报告的变化。 如果没有@Override,你可以改变方法签名而忘记改变它的覆盖,使用@Override,编译器将为你捕获它。

有这样的安全网总是好的。

我总是使用标签。它是一个简单的编译时标志,用于捕捉我可能犯的小错误。

它会捕获tostring()而不是tostring()

小事情有助于大项目。