从字段元素获取包名称和参数化类型 - 注释处理器
Get package name and parametrized type from a field element - Annotation Processor
如何从 Annotation 处理器中的 field element
从 type
获取 package name
、generic type
和 Parametrized type
?
说,如果Element.asType
returns 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);
获取类型参数,例如String
:
if (type.getKind() == TypeKind.DECLARED) {
List<? extends TypeMirror> args =
((DeclaredType) type).getTypeArguments();
args.forEach(t -> {/*...*/});
}
参见:Types.asElement
, Elements.getPackageOf
, Types.erasure
and DeclaredType.getTypeArguments
。
如何从 Annotation 处理器中的 field element
从 type
获取 package name
、generic type
和 Parametrized type
?
说,如果Element.asType
returns 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);
获取类型参数,例如String
:
if (type.getKind() == TypeKind.DECLARED) {
List<? extends TypeMirror> args =
((DeclaredType) type).getTypeArguments();
args.forEach(t -> {/*...*/});
}
参见:Types.asElement
, Elements.getPackageOf
, Types.erasure
and DeclaredType.getTypeArguments
。