的我们有这个类:表示内源保留注释
public class MyClass {
@Retention(RetentionPolicy.SOURCE)
private @interface MyInterface { }
@MyInterface
public void hello() { }
}
正如你所看到的,它有一个内部的唯一来源的注释。我的问题是:导出的二进制文件(jar)是否包含MyClass$MyInterface.class
文件?如果我们看保留,我们可以说不,因为这个注释应该被编译器丢弃。但是它仍然被添加到MyClass.class
的内部类的列表中,并且MyClass$MyInterface.class
文件也被创建。
如果我们call
myClass.getEnclosedElements()
和MyClass$MyInterface.class
不存在当我们对这种类
public class MyProcessedClass extends MyClass {}
运行注释处理器注释处理失败。如果存在MyClass$MyInterface.class
,则处理正常。
在'myClass.getEnclosedElements()'中,什么是'myClass'?表示“MyClass”或“MyProcessedClass”的'TypeElement'? – Radiodef
这应该是MyClass。 – WonderCsabo