以下示例说明了基本问题。
public class MyClass {
private @Foo MyClass _myClass;
public void test() {
// the type information for the `_myClass` reference does not include the `@Foo` annotation
Object obj = _myClass;
}
}
使用注释处理器或编译器插件,您可以在_myClass
变量声明中检查Object obj = _myClass
初始化程序的类型。
具体来说,与JCTree.JCIdent#type
引用相对应的_myClass
字段在元数据中没有@Foo
注释。这似乎是编译器中的一个普遍问题-在表达式的属性分配等过程中,所有注释元数据都会丢失。这会阻止整个类的功能本来可以与注释一起使用。
或者,也许我缺少明显的东西?
我宁愿将此作为功能请求记录在JDK Bug tracker上,但这是一个封闭的系统:(
我希望该项目的某个人可能潜伏在这里,并可以提供更多信息。