Java:Element

文章目录

  • Element
    • 方法
      • getModifiers();
      • ElementKind getKind();
      • Element getEnclosingElement();
      • List getEnclosedElements();
      • A getAnnotation(Class annotationType);
      • List getAnnotationMirrors()
      • TypeMirror asType();
  • VariableElement
  • ExecutableElement
  • TypeElement
  • PackageElement
  • Parameterizable
  • TypeParameterElement
  • QualifiedNameable

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 getEnclosedElements();

和上一个方法相反,返回该元素的子元素

  • 类或接口,返回包含了它直接声明的字段、方法、构造函数和成员类型
  • 包将顶级类和接口包含在其中,但不被视为包含子包。
  • 其他种类的元素目前不被认为包含任何元素

A getAnnotation(Class annotationType);

获取指定类型的注解

List getAnnotationMirrors()

返回元素上存在的所有注释,无论是直接存在还是通过继承存在。

TypeMirror asType();

返回由此元素定义的类型。 泛型元素定义了一系列类型,而不仅仅是一个。 如果这是一个通用元素,则返回一个原型类型。
这是元素对与其自身形式类型参数对应的类型变量的调用。 例如,对于泛型类元素C ,返回参数化类型C
。 Types实用程序接口有更通用的方法来获取元素定义的所有类型。

Java:Element_第1张图片

VariableElement

变量元素

表示字段、 enum常量、方法或构造函数参数、局部变量、资源变量或异常参数。

ExecutableElement

可执行元素

表示类或接口的方法、构造函数或初始值设定项(静态或实例),包括注解类型元素。

TypeElement

类型元素

表示一个类或接口程序元素。 提供对有关类型及其成员的信息的访问。 请注意,枚举类型是一种类,注解类型是一种接口。

PackageElement

包元素

表示包程序元素。 提供对有关包及其成员的信息的访问。

Parameterizable

可参数化的

具有类型参数的元素的混合接口

TypeParameterElement

类型参数化元素

表示泛型类、接口、方法或构造函数元素的形式类型参数

QualifiedNameable

限定可命名的

具有限定名称的元素的混合接口。

有关限定和非限定
Java中限定类名和非限定类名的区别

任何一个java文件,都可以被拆解为各种不同的Element。

参考资料:
1、编译时动态生成代码技术之Element详解
2、Java中限定类名和非限定类名的区别
3、编译时注解学习一之 Element元素

你可能感兴趣的:(Java,java,开发语言,后端)