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

tou*_*ody 4 java swing overriding

有没有办法强制使用@Override 注释?

只是为了澄清,我不是在问“我如何强制子类实现一个方法”(像这样):

public abstract class BaseClass {
    public abstract void foo();
}
Run Code Online (Sandbox Code Playgroud)

我专门询问这种情况:

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.");
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,即使NonAnnotatedSubclass没有明确的@Override注释,两者都可以编译。有没有办法让编译器在这种情况下抛出错误/警告NonAnnotatedSubclass

我问,因为有时当我扩展类时,我不小心覆盖了父方法,因为它们的名称与我要创建的名称相似(如.paint()在 Swing 中)。

sis*_*hus 5

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

但是,静态分析工具可以完全执行您想要的类型。我主要使用checkstyle来强制使用 @Override。它有明确的使用规则@Override可以集成到所有标准的 Java 构建工具中——Maven、Gradle 等。