我可以强制显式使用@Override 吗?
Can I force the explicit use of @Override?
有没有办法强制使用@Override 注解?
澄清一下,我不是在问 "how do I force a subclass to implement a method"(比如 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
的情况下抛出 error/warning?
我问,因为有时当我扩展 类 时,我不小心覆盖了父方法,因为它们的名称与我创建的名称相似(例如 Swing 中的 .paint()
)。
Java 编译器不会明确强制使用@Override 注释。这样做会破坏与 Java5 之前代码的向后兼容性。
但是,静态分析工具可以准确地执行您想要的那种事情。我主要使用 checkstyle to enforce use of @Override. It has an explicit rule 来使用 @Override
,它可以集成到所有标准 Java 构建工具中 - Maven、Gradle 等
有没有办法强制使用@Override 注解?
澄清一下,我不是在问 "how do I force a subclass to implement a method"(比如 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
的情况下抛出 error/warning?
我问,因为有时当我扩展 类 时,我不小心覆盖了父方法,因为它们的名称与我创建的名称相似(例如 Swing 中的 .paint()
)。
Java 编译器不会明确强制使用@Override 注释。这样做会破坏与 Java5 之前代码的向后兼容性。
但是,静态分析工具可以准确地执行您想要的那种事情。我主要使用 checkstyle to enforce use of @Override. It has an explicit rule 来使用 @Override
,它可以集成到所有标准 Java 构建工具中 - Maven、Gradle 等