表示程序元素,例如包、类或方法。 每个元素代表一个静态的、语言级别的构造
用于建模java编程语言元素的接口。在一个java文件中任何内容,都可以理解为不同的Element
Element可以和Type一起理解:Element在编译期起作用,在apt中经常使用;Type在运行期起作用,处理泛型时经常用到。
获取元素的修饰词。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;
}
获取元素类型,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;
}
}
得到该元素的父元素。
和上一个方法相反,返回该元素的子元素
获取指定类型的注解
返回元素上存在的所有注释,无论是直接存在还是通过继承存在。
返回由此元素定义的类型。 泛型元素定义了一系列类型,而不仅仅是一个。 如果这是一个通用元素,则返回一个原型类型。
这是元素对与其自身形式类型参数对应的类型变量的调用。 例如,对于泛型类元素C ,返回参数化类型C
。 Types实用程序接口有更通用的方法来获取元素定义的所有类型。
变量元素
表示字段、 enum常量、方法或构造函数参数、局部变量、资源变量或异常参数。
可执行元素
表示类或接口的方法、构造函数或初始值设定项(静态或实例),包括注解类型元素。
类型元素
表示一个类或接口程序元素。 提供对有关类型及其成员的信息的访问。 请注意,枚举类型是一种类,注解类型是一种接口。
包元素
表示包程序元素。 提供对有关包及其成员的信息的访问。
可参数化的
具有类型参数的元素的混合接口
类型参数化元素
表示泛型类、接口、方法或构造函数元素的形式类型参数
限定可命名的
具有限定名称的元素的混合接口。
有关限定和非限定
Java中限定类名和非限定类名的区别
任何一个java文件,都可以被拆解为各种不同的Element。
参考资料:
1、编译时动态生成代码技术之Element详解
2、Java中限定类名和非限定类名的区别
3、编译时注解学习一之 Element元素