Java:Element

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元素

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值