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



我正在尝试使用注释处理器来验证注释,作为这项工作的一部分,我正在尝试弄清楚如何使用API来确定可执行元素的参数是否是参数化类型(例如List(,如果是,参数化类型是什么(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() + "]");
                }));

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

最新更新