我正在尝试使用注释处理器来验证注释,为此,我试图弄清楚如何使用API来确定ExecutableElement的Parameter是否为参数化类型(例如List < Foo>),如果是,则参数化的类型是(Foo)。
除了解析ve.asType()。toString()(其中VariableElement ve是ExecutableElement e.getParameters()的元素)给定的字符串外,还有其他方法可以做到这一点吗?不仅仅是简单的字符串,对这些类型有更好的处理是很好的。
答案 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]