背后的概念是什么:类型-元素-镜像

问题描述

类型的对象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)。

我不知道各个之间的概念性区别是什么ElementType以及Mirror类是。由于我不太了解,很难对注释处理器进行有效编程。有多种方法可以在这些概念之间“转换”,但是我不确定使用它们时我在做什么。

例如,让我有一个实例AnnotationMirror
当我打电话时,getAnnotationType()我得到了一个实例DeclaredTypeTypeMirror无论出于何种原因实现)。
然后,我可以调用asElement()它并获取的实例Element
发生了什么事?