我正在使用Java 6的注释处理,即可以在其中找到的内容javax.annotation.processing(不是Java 5的APT)。
javax.annotation.processing
我不知道各个之间的概念性区别是什么Element,Type以及Mirror类是。由于我不太了解,很难对注释处理器进行有效编程。有多种方法可以在这些概念之间“转换”,但是我不确定使用它们时我在做什么。
Element
Type
Mirror
例如,让我有一个实例AnnotationMirror。 当我打电话时,getAnnotationType()我得到了一个实例DeclaredType(TypeMirror无论出于何种原因实现)。 然后,我可以调用asElement()它并获取的实例Element。 发生了什么事?
AnnotationMirror
getAnnotationType()
DeclaredType
TypeMirror
asElement()
类型的对象javax.lang.model.element.AnnotationMirror表示代码中的注释。
javax.lang.model.element.AnnotationMirror
声明的类型表示注释类。
它的元素是通用类(有关此问题的更多信息,请参见http://java.sun.com/javase/6/docs/api/javax/lang/model/element/TypeElement.html)。元素可能是类的通用版本,例如List,其中声明的类型是参数化的版本,例如List<String>。但是,我不确定注释类是否可以使用泛型,因此在这种情况下,区别可能无关紧要。
List
List<String>
例如,假设您具有以下JUnit4方法:
@Test(expected = MyException.class) public void myTest() { // do some tests on some class... }
AnnotationMirror表示@Test(expected = NullPointerException.class)。声明的类型是org.junit.Test类。该元素与不涉及泛型的元素大致相同。
@Test(expected = NullPointerException.class)
org.junit.Test