有没有办法强制编译器检查我是否在子方法中使用与父方法相同的注释。如果我使用@NotNull
和String
,一切都会按照我的预期运作。
public static final int FIRST_ENUM = 0;
public static final int SECOND_ENUM = 1;
@IntDef(value = {
FIRST_ENUM,
SECOND_ENUM
})
@Retention(RetentionPolicy.SOURCE)
public @interface MyEnum {
}
class Parent {
public void method(@MyEnum int a) {
}
}
class Child extends Parent {
@Override
public void method(int a) { // This is valid otherwise there is no @MyEnum
}
}
虽然我没有覆盖所有注释,但此代码有效。
答案 0 :(得分:0)
要使编译器检查注释的一致性,必须在编译期间运行注释处理器。您可以使用标准的javac -processor
标志来执行此操作。在没有注释处理器的情况下运行时,编译器会将大多数注释写入.class
文件,但不会验证它们的语义。
您可以定义自己的注释处理器,或使用其他人编写的注释处理器。
Fake Enum Checker的Checker Framework可以在编译时验证您的@MyEnum
注释是否正确使用。