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

标签 java annotations annotation-processing annotation-processor

我怎样才能得到 package name , generic typeParametrized type来自type来自field element在注释处理器中?

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

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

element utils里面有没有方法, type utils

最佳答案

获取包java.util:

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

获取原始类型 List:

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

获取类型参数,例如字符串:

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

参见:Types.asElement , Elements.getPackageOf , Types.erasureDeclaredType.getTypeArguments .

关于java - 从字段元素获取包名称和参数化类型 - 注释处理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44685279/

相关文章:

java - Android JSONObject api16/api22 从 HashMap 复制不同

java - 如何确定一个方法是否被 Hook (= 第三方方法作为一个层,用于破解应用程序)

annotations - 当用户为任何主题注释多个类别时,注释者之间达成一致

java - 如何在testng监听器java中使用自定义类注释

java - 为什么要用@interface来定义注解?

java - 注释处理器: how to verity method return type is Map<Foo,栏>

java错误不是报表-电费单

java - Spring REST API 服务单元测试(更新(PUT 方法))

java - 创建自定义注释时 AnnotationProcessor 与 ConstraintValidator 有什么用

java - 在编译时访问VM参数