У меня есть DeclaredType
поля, и я хотел бы получить полностью определенный тип (необработанный тип?) Поля.Например, если поле имеет вид:
public static Optional<String> foo;
Я хотел бы получить java.util.Optional
.
В настоящее время я могу получить имя пакета с помощью:
env.getElementUtils().getPackageOf(declaredType.asElement());
IЯ могу получить аргументы типа, однако я возвращаюсь к той же проблеме, и в итоге получаю List
из TypeMirror
, который я не знаю, как получить квалифицированное имя типов.
Я заметил, что я могу позвонить TypeMirror#toString()
, и это вернет (для вышеупомянутого) что-то вроде:
java.util.Optional<java.lang.String>
Я думаю, я мог бы тогда вырезать все перед <
, но это похоже нахак.
Для справки вот как я получаю поле:
private VariableElement getFieldWithName(DocletEnvironment environment, TypeElement classDoc, String fieldName) {
for(VariableElement e : ElementFilter.fieldsIn(environment.getElementUtils().getAllMembers(classDoc))) {
if(e.getSimpleName().toString().equals(fieldName)) {
return e;
}
}
return null;
}
TypeElement classElement = env.getElementUtils().getTypeElement(MyClass.class.getCanonicalName());
VariableElement fieldDoc = getFieldWithName(env, classElement, "foo");
DeclaredType declaredType = (DeclaredType) fieldDoc.asType();