java - 使用 Java 注解处理器了解方法参数的参数化类型

标签 java annotations annotation-processing

我正在尝试使用注释处理器来验证注释,作为该工作的一部分,我正在尝试弄清楚如何使用 API 来确定 ExecutableElement 的参数是否是参数化类型(例如 List< Foo>),如果是,参数化类型是什么(Foo)。

除了解析 ve.asType().toString() 给出的字符串(其中 VariableElement ve 是 ExecutableElement e.getParameters() 的元素)之外,还有什么方法可以做到这一点?如果能够更好地处理这些类型而不仅仅是字符串,那就太好了。

最佳答案

这个想法是知道何时转换为什么,在您的情况下,您需要获取泛型类型参数,因此您需要转换为 DeclaredType

例如下面的方法

@SampleAnno
public void something(List<String> paramx){

}

像这样的处理器中的代码

ExecutableElement method = (ExecutableElement) this.sampleElement;

method.getParameters()
        .forEach(parameter -> ((DeclaredType)parameter.asType()).getTypeArguments()
                .forEach(typeMirror -> {
                 messager.printMessage(Diagnostic.Kind.NOTE, "::::::: > [" + typeMirror.toString() + "]");
                }));

应该打印 信息:java::::::::> [java.lang.String]

关于java - 使用 Java 注解处理器了解方法参数的参数化类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55834655/

相关文章:

java - 在 Model-View-Controller 中,为什么模型的改变不会触发 View 的改变?

java - 如何管理登录用户页面标题

java - 检查一个字符是整数还是字母

java - 注解处理第三方库

java - 尝试将 AddAll 添加到 MutableList 时出现不受支持的异常

scala - 为什么要通过@uV 禁用方差检查?

java - 带有@Pattern 的元注释在 Spring 不起作用

spring-boot - Kotlin Spring Boot 注解处理 "Cannot Resolve Configuration Processing"

java - 如何在TypeElement中查找带注释的方法?

Java ee 注释不起作用