要求给定类型的所有字段都由某个字段注释来注释

时间:2019-05-13 23:54:58

标签: java reflection annotations

我有一个很好的字段注释

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Foo {
    // lots of useful, mandatory values here
}

我想创建一个类型注释

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.CLASS)
public @interface Bar {
    ...
}

使得任何带有注释@Bar的类型如果包含未用@Foo.注释的字段都将引发编译器警告

换句话说,我希望Bar强制执行一项合同,其中所有@Bar注释的类的字段必须必须具有@Foo注释,否则我的编译器会发出警告。

这可能吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

没有使javac直接执行此操作的注释。

但是,有些东西叫做“注释处理器”。它们作为编译运行的一部分运行,并且可以生成错误和警告。您可以编写一个代码,使其在任何包含用@Bar注释的类型的源文件上触发,检查其中的每个字段,如果发现没有@Foo注释的任何文件,则发出错误。

注释处理器可以处理任何保留级别的注释。