文章目录
Element
表示程序元素,例如包、类或方法。 每个元素代表一个静态的、语言级别的构造
用于建模java编程语言元素的接口。在一个java文件中任何内容,都可以理解为不同的Element
Element可以和Type一起理解:Element在编译期起作用,在apt中经常使用;Type在运行期起作用,处理泛型时经常用到。
方法
getModifiers();
获取元素的修饰词。Modifier是一个枚举类型,包含了所有的修饰词,如public,private,abstract等
public enum Modifier {
/** The modifier {@code public} */ PUBLIC,
/** The modifier {@code protected} */ PROTECTED,
/** The modifier {@code private} */ PRIVATE,
/** The modifier {@code abstract} */ ABSTRACT,
/**
* The modifier {@code default}
* @since 1.8
*/
DEFAULT,
/** The modifier {@code static} */ STATIC,
/** The modifier {@code final} */ FINAL,
/** The modifier {@code transient} */ TRANSIENT,
/** The modifier {@code volatile} */ VOLATILE,
/** The modifier {@code synchronized} */ SYNCHRONIZED,
/** The modifier {@code native} */ NATIVE,
/** The modifier {@code strictfp} */ STRICTFP;
}
ElementKind getKind();
获取元素类型,Element的类型包括:包、枚举、类、注解、接口、枚举常量、字段、参数、局部变量、异常参数、方法、构造方法等。
public enum ElementKind {
PACKAGE,
ENUM,
CLASS,
ANNOTATION_TYPE,
INTERFACE,
ENUM_CONSTANT,
FIELD,
PARAMETER,
LOCAL_VARIABLE,
EXCEPTION_PARAMETER,
METHOD,
CONSTRUCTOR,
STATIC_INIT,
INSTANCE_INIT,
TYPE_PARAMETER,
OTHER,
RESOURCE_VARIABLE;
public boolean isClass() {
return this == CLASS || this == ENUM;
}
public boolean isInterface() {
return this == INTERFACE || this == ANNOTATION_TYPE;
}
public boolean isField() {
return this == FIELD || this == ENUM_CONSTANT;
}
}
Element getEnclosingElement();
得到该元素的父元素。
- 顶级元素返回包元素
- 包元素返回null
- 方法或构造函数的参数,则返回声明该参数的方法或者构造函数
List<? extends Element> getEnclosedElements();
和上一个方法相反,返回该元素的子元素
- 类或接口,返回包含了它直接声明的字段、方法、构造函数和成员类型
- 包将顶级类和接口包含在其中,但不被视为包含子包。
- 其他种类的元素目前不被认为包含任何元素
A getAnnotation(Class annotationType);
获取指定类型的注解
List<? extends AnnotationMirror> getAnnotationMirrors()
返回元素上存在的所有注释,无论是直接存在还是通过继承存在。
TypeMirror asType();
返回由此元素定义的类型。 泛型元素定义了一系列类型,而不仅仅是一个。 如果这是一个通用元素,则返回一个原型类型。
这是元素对与其自身形式类型参数对应的类型变量的调用。 例如,对于泛型类元素C ,返回参数化类型C
。 Types实用程序接口有更通用的方法来获取元素定义的所有类型。
VariableElement
变量元素
表示字段、 enum常量、方法或构造函数参数、局部变量、资源变量或异常参数。
ExecutableElement
可执行元素
表示类或接口的方法、构造函数或初始值设定项(静态或实例),包括注解类型元素。
TypeElement
类型元素
表示一个类或接口程序元素。 提供对有关类型及其成员的信息的访问。 请注意,枚举类型是一种类,注解类型是一种接口。
PackageElement
包元素
表示包程序元素。 提供对有关包及其成员的信息的访问。
Parameterizable
可参数化的
具有类型参数的元素的混合接口
TypeParameterElement
类型参数化元素
表示泛型类、接口、方法或构造函数元素的形式类型参数
QualifiedNameable
限定可命名的
具有限定名称的元素的混合接口。
有关限定和非限定
Java中限定类名和非限定类名的区别
任何一个java文件,都可以被拆解为各种不同的Element。
参考资料:
1、编译时动态生成代码技术之Element详解
2、Java中限定类名和非限定类名的区别
3、编译时注解学习一之 Element元素