我可以强制显式使用@Override吗?

时间:2016-04-17 20:31:23

标签: java swing override

有没有办法强制使用@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())。

1 个答案:

答案 0 :(得分:4)

Java编译器没有明确强制使用@Override注释。这样做会破坏与Java5之前代码的向后兼容性。

但是,静态分析工具可以强制执行您想要的任何类型。我主要使用checkstyle来强制使用@Override。它有一个明确的rule用于@Override,它可以集成到所有标准的Java构建工具中 - Maven,Gradle等。