如何声明扩展注释的通用 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> 来引用 类 个注释。