使用Java的@Override注释的最佳实践是什么?为什么?
用@Override注释标记每个被重写的方法似乎有点过分。是否有某些编程情况需要使用@Override,而其他情况不应该使用@Override?
使用Java的@Override注释的最佳实践是什么?为什么?
用@Override注释标记每个被重写的方法似乎有点过分。是否有某些编程情况需要使用@Override,而其他情况不应该使用@Override?
当前回答
最佳实践是始终使用它(或让IDE为您填充它们)
@Override有用性是检测父类中没有向下报告的变化。 如果没有@Override,你可以改变方法签名而忘记改变它的覆盖,使用@Override,编译器将为你捕获它。
有这样的安全网总是好的。
其他回答
它允许你(好吧,编译器)在你重写的方法名上使用了错误的拼写。
每当一个方法覆盖了另一个方法,或者一个方法在接口中实现了签名。
@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注释,那么您将看到一个编译错误,并且没有浪费时间思考为什么事件处理程序没有运行。
我认为最好在允许的情况下编写@override。它有助于编码。然而,需要注意的是,对于ecipse Helios,无论是sdk 5还是6,都允许为实现的接口方法使用@override注释。对于Galileo,无论是5还是6,@override注释都不允许。
当你使用Override时要小心,因为你不能在starUML之后做逆向工程;首先制作uml。