我有一个很好的字段注释
@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
注释,否则我的编译器会发出警告。
这可能吗?
谢谢!
答案 0 :(得分:3)
没有使javac直接执行此操作的注释。
但是,有些东西叫做“注释处理器”。它们作为编译运行的一部分运行,并且可以生成错误和警告。您可以编写一个代码,使其在任何包含用@Bar
注释的类型的源文件上触发,检查其中的每个字段,如果发现没有@Foo
注释的任何文件,则发出错误。
注释处理器可以处理任何保留级别的注释。