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

时间:2017-06-21 20:00:44

标签: java annotations annotation-processing annotation-processor

如何从注释处理器中package name的{​​{1}}获取generic typeParametrized typetype

说,如果field element返回 Element.asType ,我想要

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

Stringelement utils中是否有任何方法?

1 个答案:

答案 0 :(得分:9)

获取包java.util

Element        e   = processingEnv.getTypeUtils().asElement(type);
PackageElement pkg = processingEnv.getElementUtils().getPackageOf(e);

获取原始类型List

TypeMirror raw = processingEnv.getTypeUtils().erasure(type);

获取类型参数,例如String

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

请参阅:Types.asElementElements.getPackageOfTypes.erasureDeclaredType.getTypeArguments