我正在尝试使用注释处理器来验证注释,作为该工作的一部分,我正在尝试弄清楚如何使用 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/