我正在开发一个注释处理器,我会向我的类传递一个表示要管理的注释的参数,例如:Class<? extends @interface> annotationClass
不幸的是,这无法编译。我可以编译的唯一方法是使用原始类型 Class
但这样当我尝试类似的事情时
roundEnvironment.getElementsAnnotatedWith(annotationClass)
返回的类型是Object
而不是javax.lang.model.element.Element
public Map<ClassName, List<ElementInfo>> initClassesToGenerate(Class annotationClass, ElementKind elementKind, RoundEnvironment roundEnvironment) {
Map<ClassName, List<ElementInfo>> result = new HashMap<>();
// init map
for (Element annotatedElement : roundEnvironment.getElementsAnnotatedWith(annotationClass)) {
TypeElement typeElement = (TypeElement) annotatedElement;
ClassName className = ClassName.get(typeElement);
if (!result.containsKey(className)) {
result.put(className, new ArrayList<>());
}
}
return result;
}
最佳答案
您可以使用<T extends Annotation>
。然后您可以使用Class<T>
引用注释类。
关于java - 如何声明扩展注释的通用类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59953450/