模块  java.compiler
软件包  javax.lang.model.util

Interface Elements


  • public interface Elements
    用于操作程序元素的实用方法。

    兼容性注意:在将来的平台版本中,可以将方法添加到此接口。

    从以下版本开始:
    1.6
    另请参见:
    ProcessingEnvironment.getElementUtils()
    • 方法详细信息

      • getPackageElement

        PackageElement getPackageElement​(CharSequence name)
        如果包在环境中是唯一的,则返回给定其完全限定名称的包。 如果使用模块运行,则会搜索模块图中的所有模块以查找匹配的包。
        参数
        name - 完全限定的包名称,或未命名包的空字符串
        结果
        指定的包,如果无法唯一找到, null
      • getPackageElement

        default PackageElement getPackageElement​(ModuleElement module,
                                                 CharSequence name)
        给定其完全限定名称的包,返回一个包,如给定模块所示。
        实现要求:
        此方法的默认实现返回 null
        参数
        name - 完全限定的包名称,或未命名包的空字符串
        模块 - 应该发生查找的模块
        结果
        指定的包,如果找不到, null
        从以下版本开始:
        9
        另请参见:
        getAllPackageElements(java.lang.CharSequence)
      • getAllPackageElements

        default Set<? extends PackageElement> getAllPackageElements​(CharSequence name)
        返回具有给定规范名称的所有包元素。 如果包元素位于不同的模块中,则可能存在多个具有相同规范名称的包元素。
        实现要求:
        此方法的默认实现调用getAllModuleElements并存储结果。 如果模块集为空,则通过name参数调用getPackageElement(name) 如果getPackageElement(name)null ,则返回一组空的包元素; 否则,返回包含找到的包元素的单个元素集。 如果所述模块组非空,模块遍历和任何非null的结果getPackageElement(module, name)被累积成一组。 然后返回该集合。
        参数
        name - 规范名称
        结果
        包元素,如果没有找到名称的包,则为空集
        从以下版本开始:
        9
        另请参见:
        getPackageElement(ModuleElement, CharSequence)
      • getTypeElement

        TypeElement getTypeElement​(CharSequence name)
        如果type元素在环境中是唯一的,则返回给定其规范名称的type元素。 如果使用模块运行,则会搜索模块图中的所有模块以查找匹配的类型元素。
        参数
        name - 规范名称
        结果
        命名类型元素,如果无法唯一找到, null
      • getTypeElement

        default TypeElement getTypeElement​(ModuleElement module,
                                           CharSequence name)
        给定其规范名称,返回一个type元素,如给定模块所示。
        实现要求:
        此方法的默认实现返回 null
        参数
        name - 规范名称
        模块 - 应该发生查找的模块
        结果
        命名的类型元素,如果找不到 null
        从以下版本开始:
        9
        另请参见:
        getAllTypeElements(java.lang.CharSequence)
      • getAllTypeElements

        default Set<? extends TypeElement> getAllTypeElements​(CharSequence name)
        返回具有给定规范名称的所有类型元素。 如果类型元素位于不同的模块中,则可能有多个具有相同规范名称的类型元素。
        实现要求:
        此方法的默认实现调用getAllModuleElements并存储结果。 如果模块集为空,则通过name参数调用getTypeElement(name) 如果getTypeElement(name)null ,则返回一组空的类型元素; 否则,返回具有找到的类型元素的单个元素集。 如果所述模块组非空,模块遍历和任何非null的结果getTypeElement(module, name)被累积成一组。 然后返回该集合。
        参数
        name - 规范名称
        结果
        type元素,如果没有找到名称的类型,则为空集
        从以下版本开始:
        9
        另请参见:
        getTypeElement(ModuleElement, CharSequence)
      • getModuleElement

        default ModuleElement getModuleElement​(CharSequence name)
        给出完全限定名称的模块元素。 如果找不到指定的模块,则返回null 无法找到模块的一种情况是环境是否包含模块,例如为没有模块的source version配置的注释处理环境。
        实现要求:
        此方法的默认实现返回 null
        参数
        name - 名字
        结果
        命名的模块元素,如果找不到 null
        从以下版本开始:
        9
        另请参见:
        getAllModuleElements()
      • getAllModuleElements

        default Set<? extends ModuleElement> getAllModuleElements()
        返回当前环境中的所有模块元素。 如果没有模块,则返回空集。 当环境不包括模块时,会出现没有模块的情况,例如为没有模块的source version配置的注释处理环境。
        实现要求:
        此方法的默认实现返回一个空集。
        结果
        已知模块元素,如果没有模块,则为空集
        从以下版本开始:
        9
        另请参见:
        getModuleElement(CharSequence)
      • getDocComment

        String getDocComment​(Element e)
        返回元素的文档(“Javadoc”)注释的文本。

        元素的文档注释是以“ /** ”开头的注释,以单独的“ */*/ ,并且紧跟在元素之前,忽略空格。 因此,文档注释至少包含三个“ * ”字符。 为文档注释返回的文本是源代码中显示的注释的处理形式。 领先的“ /** ”和尾随“ */ ”已删除。 对于在初始“ /** ”之后开始的注释行,将丢弃前导空白字符,就像在空格或开始行之后出现的任何连续“ * ”字符一样。 然后将处理过的行连接在一起(包括行终止符)并返回。

        参数
        e - 正在检查的元素
        结果
        元素的文档注释,如果没有, null
        See The Java™ Language Specification:
        3.6白色空间
      • isDeprecated

        boolean isDeprecated​(Element e)
        返回 true如果元素已过时, false否则。
        参数
        e - 正在检查的元素
        结果
        true如果不推荐使用该元素,否则为 false
      • getOrigin

        default Elements.Origin getOrigin​(Element e)
        返回给定元素的原点

        请注意,如果此方法返回EXPLICIT并且元素是从类文件创建的,则该元素实际上可能不对应于源代码中显式声明的构造。 这是由于类文件格式在保留源代码信息时保真度的限制。 例如,类文件格式的至少某些版本不保留构造函数是由程序员显式声明还是隐式声明为默认构造函数

        实现要求:
        此方法的默认实现返回 EXPLICIT
        参数
        e - 正在检查的元素
        结果
        给定元素的起源
        从以下版本开始:
        9
      • getOrigin

        default Elements.Origin getOrigin​(AnnotatedConstruct c,
                                          AnnotationMirror a)
        返回给定注释镜像的原点 如果注释镜像是隐式声明的容器注释,用于保存可重复注释类型的重复注释,则注释镜像为mandated

        请注意,如果此方法返回EXPLICIT并且注释镜像是从类文件创建的,则该元素实际上可能不对应于源代码中显式声明的构造。 这是由于类文件格式在保留源代码信息时保真度的限制。 例如,类文件格式的至少某些版本不保留注释是由程序员显式声明还是隐式声明为容器注释

        实现要求:
        此方法的默认实现返回 EXPLICIT
        参数
        c - 注释镜像修改的构造
        a - 正在检查的注释镜像
        结果
        给定注释镜像的来源
        从以下版本开始:
        9
        See The Java™ Language Specification:
        9.6.3可重复的注释类型,9.7.5相同类型的多个注释
      • getOrigin

        default Elements.Origin getOrigin​(ModuleElement m,
                                          ModuleElement.Directive directive)
        返回给定模块指令的原点

        请注意,如果此方法返回EXPLICIT并且模块指令是从类文件创建的,则模块指令实际上可能不对应于源代码中显式声明的构造。 这是由于类文件格式在保留源代码信息时保真度的限制。 例如,类文件格式的至少某些版本不保留uses指令是由程序员显式声明还是作为合成构造添加。

        请注意,如果指令是从类文件创建的,则实现可能无法可靠地确定指令的原始状态,因为在保留源代码信息时类文件格式的保真度有限。

        实现要求:
        此方法的默认实现返回 EXPLICIT
        参数
        m - 指令的模块
        directive - 正在检查的模块指令
        结果
        给定指令的来源
        从以下版本开始:
        9
      • isBridge

        default boolean isBridge​(ExecutableElement e)
        返回 true如果可执行元素是bridge方法, false否则。
        实现要求:
        此方法的默认实现返回 false
        参数
        e - 正在检查的可执行文件
        结果
        true如果可执行元素是桥接方法, false
        从以下版本开始:
        9
      • getBinaryName

        Name getBinaryName​(TypeElement type)
        返回类型元素的 二进制名称
        参数
        type - 正在检查的类型元素
        结果
        二进制名称
        另请参见:
        TypeElement.getQualifiedName()
        See The Java™ Language Specification:
        13.1二进制形式
      • getPackageOf

        PackageElement getPackageOf​(Element type)
        返回元素的包。 包的包装本身。
        参数
        type - 正在检查的元素
        结果
        一个元素的包
      • getModuleOf

        default ModuleElement getModuleOf​(Element type)
        返回元素的模块。 模块的模块本身。 如果元素没有模块,则返回null。 如果环境不包含模块,例如为没有模块的source version配置的注释处理环境,则元素没有模块的一种情况是。
        实现要求:
        此方法的默认实现返回 null
        参数
        type - 正在检查的元素
        结果
        元素的模块
        从以下版本开始:
        9
      • getAllMembers

        List<? extends Element> getAllMembers​(TypeElement type)
        返回类型元素的所有成员,无论是继承还是直接声明。 对于类,结果还包括其构造函数,但不包括本地或匿名类。
        API Note:
        可以使用ElementFilter中的方法分离某些种类的元素。
        参数
        type - 正在检查的类型
        结果
        所有类型的成员
        另请参见:
        Element.getEnclosedElements()
      • hides

        boolean hides​(Element hider,
                      Element hidden)
        测试一种类型,方法或字段是否隐藏另一种类型,方法或字段。
        参数
        hider - 第一个元素
        hidden - 第二个元素
        结果
        true当且仅当第一个元素隐藏第二个元素时
      • overrides

        boolean overrides​(ExecutableElement overrider,
                          ExecutableElement overridden,
                          TypeElement type)
        测试一个方法(作为给定类型的成员)是否覆盖另一个方法。 当非抽象方法覆盖抽象方法时,前者也被称为实现后者。

        在最简单和最典型的用法中, type参数的值将只是直接包含overrider (可能重写方法)的类或接口。 例如,假设m1表示方法String.hashCode并且m2表示Object.hashCode 然后我们可以询问m1是否覆盖了m2类中的String (确实如此):

        assert elements.overrides(m1, m2, elements.getTypeElement("java.lang.String"));
        更有趣的情况下,可以通过下面的例子,其中在类型的方法来说明A不会型覆盖一个类似命名方法B
        class A { public void m() {} }
        interface B { void m(); }
        ...
        m1 = ...; // A.m
        m2 = ...; // B.m
        assert ! elements.overrides(m1, m2, elements.getTypeElement("A"));
        当作为第三类型的成员观看C ,然而,在该方法A并覆盖一个在B
        class C extends A implements B {}
        ...
        assert elements.overrides(m1, m2, elements.getTypeElement("C"));
        参数
        overrider - 第一种方法,可能的覆盖
        overridden - 第二种方法,可能被覆盖
        type - 第一种方法是成员的类型
        结果
        true当且仅当第一个方法覆盖第二个方法时
        See The Java™ Language Specification:
        8.4.8继承,覆盖和隐藏,9.4.1继承和覆盖
      • getConstantExpression

        String getConstantExpression​(Object value)
        返回表示原始值或字符串的常量表达式的文本。 返回的文本采用适合表示源代码中的值的形式。
        参数
        value - 原始值或字符串
        结果
        常量表达式的文本
        异常
        IllegalArgumentException - 如果参数不是原始值或字符串
        另请参见:
        VariableElement.getConstantValue()
      • printElements

        void printElements​(Writer w,
                           Element... elements)
        以指定的顺序将元素的表示形式打印到给定的writer。 该方法的主要目的是用于诊断。 指定输出的确切格式,可能会更改。
        参数
        w - 要将输出打印到的 w
        elements - 要打印的元素
      • getName

        Name getName​(CharSequence cs)
        返回与参数具有相同字符序列的名称。
        参数
        cs - 要作为名称返回的字符序列
        结果
        与参数具有相同字符序列的名称
      • isFunctionalInterface

        boolean isFunctionalInterface​(TypeElement type)
        返回 true如果类型元件是功能性的接口, false否则。
        参数
        type - 正在检查的类型元素
        结果
        true如果元素是功能接口, false
        从以下版本开始:
        1.8
        See The Java™ Language Specification:
        9.8功能接口