问题描述
类型的对象javax.lang.model.element.AnnotationMirror
表示代码中的注释。
声明的类型表示注释类。
它的元素是通用类(有关此问题的更多信息,请参见http://java.sun.com/javase/6/docs/api/javax/lang/model/element/TypeElement.html)。元素可能是类的通用版本,例如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
类。该元素与不涉及泛型的元素大致相同。
解决方法
我正在使用Java 6的注释处理,即可以在其中找到的内容javax.annotation.processing
(不是Java 5的APT)。
我不知道各个之间的概念性区别是什么Element
,Type
以及Mirror
类是。由于我不太了解,很难对注释处理器进行有效编程。有多种方法可以在这些概念之间“转换”,但是我不确定使用它们时我在做什么。
例如,让我有一个实例AnnotationMirror
。
当我打电话时,getAnnotationType()
我得到了一个实例DeclaredType
(TypeMirror
无论出于何种原因实现)。
然后,我可以调用asElement()
它并获取的实例Element
。
发生了什么事?