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中获取,因为它的某些内部依赖于它,因此它不是通常的实用程序类。

10-06 06:14