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

时间:2019-04-24 16:26:54

标签: java annotations annotation-processing

我正在尝试使用注释处理器来验证注释,为此,我试图弄清楚如何使用API​​来确定ExecutableElement的Parameter是否为参数化类型(例如List < Foo>),如果是,则参数化的类型是(Foo)。

除了解析ve.asType()。toString()(其中VariableElement ve是ExecutableElement e.getParameters()的元素)给定的字符串外,还有其他方法可以做到这一点吗?不仅仅是简单的字符串,对这些类型有更好的处理是很好的。

1 个答案:

答案 0 :(得分: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]

相关问题