javax.lang.model:如何获取字段的类型?

jav*_*top 13 java reflection types mirror annotation-processing

java.lang.reflect,人们会这样做:

Field someField = ...;
Class<?> fieldType = someField.getType();
Run Code Online (Sandbox Code Playgroud)

但是,我该怎么做用javax.lang.modelVariableElement(这可能会或可能不会代表一个字段)?相应的返回值将是(我猜)TypeElement.

VariableElement someField = ...;
TypeElement fieldType = someField.???;
Run Code Online (Sandbox Code Playgroud)

那么,在javax.lang.model,如何获得TypeElement字段的类型(或),由VariableElement?表示?

顺便说一下,没有一个适合javax.lang.model的Stackoverflow标签;)

jav*_*top 7

嗯,我不知道,这是正确的方法.
如果真正理解这个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;
  }
}
Run Code Online (Sandbox Code Playgroud)

似乎该类Types必须从当前获得,ProcessingEnvironment因为它的一些内部依赖于它,因此它不是通常的实用类.