在java.lang.reflect
中,可以这样做:
Field someField = ...;
Class<?> fieldType = someField.getType();
但是,我该如何处理
javax.lang.model
的 VariableElement
(可能代表字段也可能不代表字段)?相应的返回值是(我猜)TypeElement
。VariableElement someField = ...;
TypeElement fieldType = someField.???;
因此,在
javax.lang.model
中,如何获取由TypeElement
表示的字段的类型(或VariableElement
)? 顺便说一句,没有一个适合Javax.lang.model;)的Stackoverflow标签。
最佳答案
好吧,我不知道,这是正确的方法。
如果真正了解此API的人告诉我,那会很好。
但是,接缝可以正常工作。
public class SomeClass {
private final ProcessingEnvironment pe = /* get it somewhere */;
private final Types typeUtils = pe.getTypeUtils();
public TypeElement getExtracted(VariableElement ve) {
TypeMirror typeMirror = ve.asType();
Element element = typeUtils.asElement(typeMirror);
// instanceof implies null-ckeck
return (element instanceof TypeElement)
? (TypeElement)element : null;
}
}
似乎
Types
类必须从当前的ProcessingEnvironment
中获取,因为它的某些内部依赖于它,因此它不是通常的实用程序类。