@Override不强制在重写方法中使用枚举注释

时间:2017-09-25 16:11:47

标签: java android compiler-errors annotations override

有没有办法强制编译器检查我是否在子方法中使用与父方法相同的注释。如果我使用@NotNullString,一切都会按照我的预期运作。

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
    }
}

虽然我没有覆盖所有注释,但此代码有效。

1 个答案:

答案 0 :(得分:0)

要使编译器检查注释的一致性,必须在编译期间运行注释处理器。您可以使用标准的javac -processor标志来执行此操作。在没有注释处理器的情况下运行时,编译器会将大多数注释写入.class文件,但不会验证它们的语义。

您可以定义自己的注释处理器,或使用其他人编写的注释处理器。 Fake Enum CheckerChecker Framework可以在编译时验证您的@MyEnum注释是否正确使用。