Подтвердить что ты не робот

Javax.lang.model: Как получить тип поля?

В java.lang.reflect можно сделать следующее:

Field someField = ...;
Class<?> fieldType = someField.getType();

Но что мне делать с javax.lang.model VariableElement (который может или не может представлять собой поле )? Соответствующее возвращаемое значение будет (я думаю) TypeElement.

VariableElement someField = ...;
TypeElement fieldType = someField.???;

Итак, в javax.lang.model, как мне получить тип (или TypeElement) поля, представленный VariableElement?

Кстати, нет ни одного тега Stackoverflow, который бы соответствовал javax.lang.model;)

4b9b3361

Ответ 1

Ну, я не знаю, это правильный способ сделать это.
Было бы хорошо, если бы кто-то, кто действительно понимает этот 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, потому что от него зависят его внутренние элементы, поэтому это не обычный класс полезности.