从字段元素 - 注释处理器获取包名称和参数化类型

mal*_*din 4 java annotations annotation-processing annotation-processor

我怎样才能获得package name,generic type并且Parametrized typetypefield element在注释处理器?

说,如果Element.asType回来java.util.List<String>,我想得到

  • 包裹名字 java.util
  • 通用类型List<E>或原始类型List(最好是原始类型)
  • 实际类型 String

有没有方法element utils,type utils

Rad*_*def 11

获得包裹java.util:

Element        e   = processingEnv.getTypeUtils().asElement(type);
PackageElement pkg = processingEnv.getElementUtils().getPackageOf(e);
Run Code Online (Sandbox Code Playgroud)

获取原始类型List:

TypeMirror raw = processingEnv.getTypeUtils().erasure(type);
Run Code Online (Sandbox Code Playgroud)

获取类型参数,例如String:

if (type.getKind() == TypeKind.DECLARED) {
    List<? extends TypeMirror> args =
        ((DeclaredType) type).getTypeArguments();
    args.forEach(t -> {/*...*/});
}
Run Code Online (Sandbox Code Playgroud)

请参阅:Types.asElement,Elements.getPackageOf,Types.erasureDeclaredType.getTypeArguments.