Java 内源保留注释的表示
我们有这样的课程:Java 内源保留注释的表示,java,annotations,annotation-processing,Java,Annotations,Annotation Processing,我们有这样的课程: public class MyClass { @Retention(RetentionPolicy.SOURCE) private @interface MyInterface { } @MyInterface public void hello() { } } 如您所见,它有一个内部的、仅源代码的注释。我的问题是:导出的二进制文件(jar)是否应该包含MyClass$MyInterface.class文件?如果我们看一下保留,我们可以说不
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 {}
如果我们
和MyClass$MyInterface.class
不存在。如果存在MyClass$MyInterface.class
,则处理正常
()
我的问题是:导出的二进制文件(jar)是否应该包含MyClass$MyInterface.class
文件
应该这样
:
常量池
表(以及其InnerClasses
属性)必须引用每个此类成员,即使该类未另行提及该成员
因此
MyClass
必须有对MyInterface
的引用。虽然我没有引证,但似乎如果有对特定类的引用,那么应该编译该类。在myClass.getEnclosedElements()
中,什么是myClass
?一个TypeElement
表示MyClass
或MyProcessedClass
?应该是MyClass。谢谢!我还检查了JLS和JVM规范,但我想我搜索了错误的术语。
myClass.getEnclosedElements()