使用Java注释处理器来理解方法参数的参数化类型

问题描述 投票:0回答:1

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

除了解析由ve.asType()。toString()给出的字符串之外,有没有办法做到这一点,其中VariableElement ve是ExecutableElement e.getParameters()的元素?能够更好地处理这些类型而不仅仅是一个字符串会更好。

java annotations annotation-processing
1个回答
1
投票

想法是知道何时转换为什么,在您的情况下,您需要获取泛型类型参数,因此您需要转换为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() + "]");
                }));

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

© www.soinside.com 2019 - 2024. All rights reserved.