【发布时间】:2015-05-29 13:39:41
【问题描述】:
我们有这个课程:
public class MyClass {
@Retention(RetentionPolicy.SOURCE)
private @interface MyInterface { }
@MyInterface
public void hello() { }
}
如您所见,它有一个内部的、仅限源代码的注释。我的问题是:导出的二进制文件(jar)是否应该包含MyClass$MyInterface.class 文件?如果我们看保留,我们可以说不是,因为这个注解应该被编译器丢弃。但是它仍然被添加到MyClass.class 的内部类列表中,并且还创建了MyClass$MyInterface.class 文件。
当我们对这个类运行注解处理器时
public class MyProcessedClass extends MyClass {}
如果我们call,则注释处理失败
myClass.getEnclosedElements()
并且MyClass$MyInterface.class 不存在。如果存在MyClass$MyInterface.class,则处理正常。
【问题讨论】:
-
在
myClass.getEnclosedElements()中,myClass是什么?TypeElement代表MyClass或MyProcessedClass? -
应该是 MyClass。
标签: java annotations annotation-processing