java - 如何声明扩展注释的通用类

标签 java java-annotations

我正在开发一个注释处理器,我会向我的类传递一个表示要管理的注释的参数,例如: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/

相关文章:

java - block 所有者窗口 Java FX

java - 如何简单地对ArrayList<>的元素进行统计操作

java - 如何减少这段代码中的 if else 语句?

java - hibernate搜索中的OnFields方法接受什么数据类型

java - 由于底层异常 : 'java.lang.NumberFormatException: For input string: "OPENSHIFT_MYSQL_DB_PORT"',无法加载连接类

java - 为什么 JPMS 允许注解类型作为服务

java - Springs 应用程序事件的自定义过滤器

java - 如何在 JAPE 右侧制作 if-else 语句?

intellij-idea - 在 Intellij IDEA 中实现方法时,org.jetbrains.annotations.NotNull 而不是 javax.annotation.Nonnull