目前我正在编写一个注解处理器,它将生成新的源代码。该处理器与应用程序本身隔离,因为它是构建项目的一步,我将整个构建系统从应用程序中分离出来。
这就是问题所在,因为我想处理在应用程序中创建的注解。让我们将其命名为CustomAnnotation,完全限定名称为com.company.api.annotation.CustomAnnotation。
在处理器中,我可以通过完全限定名称搜索注解,这真的很好。现在我似乎能够获取已注释的方法、字段等,因为我可以使用TypeElement而不是Class调用函数getElementsAnnotatedWith。
现在我们的CustomAnnotation有字段和变量,通常我会像这样获取注解本身:Class annotation = Element.getAnnotation(Class)
但我不能使用这个,因为CustomAnnotation不可用作Class对象。(当然,处理器不知道它)我尝试使用TypeMirror和其他可用的东西,但似乎没有什么作用。
有人知道一种获取注解并读取其值的方法吗?
编辑: 让我们看看这个实现:
@SupportedAnnotationTypes( "com.company.api.annotation.CustomAnnotation" )
@SupportedSourceVersion( SourceVersion.RELEASE_8 )
public class CustomProcessor extends AbstractProcessor
{
public CustomProcessor()
{
super();
}
@Override
public boolean process( Set<? extends TypeElement> annotations, RoundEnvironment roundEnv )
{
TypeElement test = annotations.iterator().next();
for ( Element elem : roundEnv.getElementsAnnotatedWith( test ) )
{
//Here is where I would get the Annotation element itself to
//read the content of it if I can use the Annotation as Class Object.
SupportedAnnotationTypes generated = elem.getAnnotation( SupportedAnnotationTypes.class );
}
}
然而,由于这个环境中不存在 CustomAnnotation.class ,我不需要使用它。那么在没有拥有Class对象的情况下,我该如何实现呢?
Element.getAnnotationMirrors()
有什么问题,接下来是AnnotationMirror.getElementValues()
? - Holger