如何声明扩展注释的通用 Class
How to declare a generic Class extending an annotation
我正在开发一个注解处理器,我会向我的 class 传递一个代表要管理的注解的参数,例如: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>
来引用 类 个注释。
我正在开发一个注解处理器,我会向我的 class 传递一个代表要管理的注解的参数,例如: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>
来引用 类 个注释。