有没有办法强制使用@Override注释?
只是为了澄清,我并没有要求"我如何强制子类实现一种方法" (如this):
public abstract class BaseClass {
public abstract void foo();
}
我具体询问这个场景:
public class AnnotatedSubclass extends BaseClass {
@Override
public void foo() {
System.out.println("I have @Override.");
}
}
public class NonAnnotatedSubclass extends BaseClass {
public void foo() {
System.out.println("I do not have @Override.");
}
}
请注意,即使NonAnnotatedSubclass
没有明确的@Override
注释,也会进行编译。有没有办法让编译器在NonAnnotatedSubclass
?
我问,因为有时当我扩展类时,我不小心覆盖了父方法,因为它们的名称与我创建的名称相似(如Swing中的.paint()
)。
答案 0 :(得分:4)
Java编译器没有明确强制使用@Override注释。这样做会破坏与Java5之前代码的向后兼容性。
但是,静态分析工具可以强制执行您想要的任何类型。我主要使用checkstyle来强制使用@Override。它有一个明确的rule用于@Override
,它可以集成到所有标准的Java构建工具中 - Maven,Gradle等。