如何在注释处理器中获取注释参数

问题描述 投票:0回答:1

我正在编写自己的注释处理器,并且我正在尝试获取我的注释的参数,如下面的代码在process方法中:

roundEnv.getElementsAnnotatedWith(annotation).forEach {
        val annotation = it.getAnnotation(annotation)
        annotation.interfaces
}

我得到的是An exception occurred: javax.lang.model.type.MirroredTypesException: Attempt to access Class objects for TypeMirrors []在构建期间。有谁知道如何获取注释数据?

java kotlin annotations annotation-processing
1个回答
4
投票

关于getAnnotation方法的文档解释了为什么Class<?>对象对注释处理器有问题:

此方法返回的注释可以包含其值为Class类型的元素。此值无法直接返回:定位和加载类所需的信息(例如要使用的类加载器)不可用,并且该类可能根本不可加载。尝试通过在返回的注释上调用相关方法来读取Class对象将导致MirroredTypeException,从中可以提取相应的TypeMirror。类似地,尝试读取Class []值元素将导致MirroredTypesException。

要访问类之类的注释元素,您需要使用Element.getAnnotationMirrors()并手动查找感兴趣的注释。这些注释镜像将包含表示实际值的元素,但不需要存在所讨论的类。

© www.soinside.com 2019 - 2024. All rights reserved.