兼容性注意: 未来版本的平台可能会添加方法到此接口中。
- 自版本:
- 1.6
- 参见:
-
Nested Class Summary
-
Method Summary
Modifier and TypeMethodDescriptionList
<? extends AnnotationMirror> 返回元素上所有存在的注解,无论是直接存在还是通过继承存在。getAllMembers
(TypeElement type) 返回类型元素的所有成员,无论是继承的还是直接声明的。default Set
<? extends ModuleElement> 返回当前环境中的所有模块元素。default Set
<? extends PackageElement> 返回给定规范名称的所有包元素。default Set
<? extends TypeElement> 返回给定规范名称的所有类型元素。getBinaryName
(TypeElement type) 返回类型元素的二进制名称。getConstantExpression
(Object value) 返回表示原始值或字符串的常量表达式的文本。返回元素的文档("Javadoc")注释的文本。Map
<? extends ExecutableElement, ? extends AnnotationValue> 返回注解元素的元素值,包括默认值。default JavaFileObject
返回此元素的文件对象,如果没有这样的文件对象则返回null
。default ModuleElement
getModuleElement
(CharSequence name) 给定完全限定名称,返回模块元素。default ModuleElement
返回元素的模块。getName
(CharSequence cs) 返回与参数具有相同字符序列的名称。default Elements.Origin
返回给定注解镜像的起源。default Elements.Origin
返回给定元素的起源。default Elements.Origin
getOrigin
(ModuleElement m, ModuleElement.Directive directive) 返回给定模块指令的起源。default TypeElement
如果存在包含元素的最外层类型元素,则返回该包含元素;否则返回null
。如果在环境中可以唯一确定包,则返回给定完全限定名称的包。default PackageElement
getPackageElement
(ModuleElement module, CharSequence name) 返回给定模块中从给定完全限定名称看到的包。返回元素的包。getTypeElement
(CharSequence name) 如果在环境中可以唯一确定类型元素,则返回给定规范名称的类型元素。default TypeElement
getTypeElement
(ModuleElement module, CharSequence name) 返回给定模块中从给定规范名称看到的类型元素。boolean
检查一个类型、方法或字段是否隐藏另一个。default boolean
isAutomaticModule
(ModuleElement module) 如果模块元素是自动模块,则返回true
,否则返回false
。default boolean
如果可执行元素是桥接方法,则返回true
,否则返回false
。default boolean
如果可执行元素可以确定为记录的规范构造函数,则返回true
,否则返回false
。default boolean
如果可执行元素可以确定为记录的紧凑构造函数,则返回true
,否则返回false
。boolean
如果元素已弃用,则返回true
,否则返回false
。boolean
如果类型元素是函数式接口,则返回true
,否则返回false
。boolean
overrides
(ExecutableElement overrider, ExecutableElement overridden, TypeElement type) 检查一个方法作为给定类或接口的成员是否覆盖另一个方法。void
printElements
(Writer w, Element... elements) 在指定顺序中向给定写入器打印元素的表示。default RecordComponentElement
recordComponentFor
(ExecutableElement accessor) 返回给定访问器的记录组件。
-
Method Details
-
getPackageElement
如果在环境中可以唯一确定包,则返回给定完全限定名称的包。如果运行时存在模块,则按以下两阶段过程搜索给定名称的包:- 通过
getPackageElement(ModuleElement, CharSequence)
返回具有给定名称的非空包,其中提供的ModuleSymbol是任何根模块, - 如果上述过程返回空列表,则在所有模块中搜索具有给定名称的可观察包
null
。- 参数:
-
name
- 完全限定包名称,或空字符串表示未命名包 - 返回:
-
指定的包,如果无法唯一确定包则返回
null
。
- 通过
-
getPackageElement
返回给定模块中从给定完全限定名称看到的包。- 实现要求:
-
此方法的默认实现返回
null
。 - 参数:
-
module
- 应进行查找的相对模块 -
name
- 完全限定包名称,或空字符串表示未命名包 - 返回:
-
指定的包,如果找不到则返回
null
。 - 自版本:
- 9
- 参见:
-
getAllPackageElements
返回具有给定规范名称的所有包元素。如果包元素位于不同模块中,则可能存在具有相同规范名称的多个包元素。- 实现要求:
-
此方法的默认实现调用
getAllModuleElements
并存储结果。如果模块集为空,则调用getPackageElement(name)
,传递名称参数。如果getPackageElement(name)
为null
,则返回一个空的包元素集;否则,返回一个包含找到的包元素的单元素集。如果模块集非空,则迭代模块,并将getPackageElement(module, name)
的任何非null
结果累积到一个集合中。然后返回该集合。 - 参数:
-
name
- 规范名称 - 返回:
- 包元素,如果找不到具有该名称的包则返回空集
- 自版本:
- 9
- 参见:
-
getTypeElement
如果在环境中可以唯一确定类型元素,则返回给定规范名称的类型元素。如果运行时存在模块,则按以下两阶段过程搜索给定名称的类型元素:- 通过
getTypeElement(ModuleElement, CharSequence)
返回具有给定名称的类型元素,其中提供的ModuleSymbol是任何根模块, - 如果上述过程返回空列表,则在所有模块中搜索具有给定名称的可观察类型元素
null
。- 参数:
-
name
- 规范名称 - 返回:
-
具有指定名称的类型元素,如果无法唯一确定类型元素则返回
null
。
- 通过
-
getTypeElement
返回给定模块中从给定规范名称看到的类型元素。- 实现要求:
-
此方法的默认实现返回
null
。 - 参数:
-
module
- 应进行查找的相对模块 -
name
- 规范名称 - 返回:
-
具有指定名称的类型元素,如果找不到则返回
null
。 - 自版本:
- 9
- 参见:
-
getAllTypeElements
返回具有给定规范名称的所有类型元素。如果类型元素位于不同模块中,则可能存在具有相同规范名称的多个类型元素。- 实现要求:
-
此方法的默认实现调用
getAllModuleElements
并存储结果。如果模块集为空,则调用getTypeElement(name)
,传递名称参数。如果getTypeElement(name)
为null
,则返回一个空的类型元素集;否则,返回一个包含找到的类型元素的单元素集。如果模块集非空,则迭代模块,并将getTypeElement(module, name)
的任何非null
结果累积到一个集合中。然后返回该集合。 - 参数:
-
name
- 规范名称 - 返回:
- 类型元素,如果找不到具有该名称的类型则返回空集
- 自版本:
- 9
- 参见:
-
getModuleElement
返回给定完全限定名称的模块元素。如果无法找到请求的模块,则返回null
。一个无法找到模块的情况是,如果环境不包括模块,例如配置为没有模块的源版本的注解处理环境。- 实现要求:
-
此方法的默认实现返回
null
。 - 参数:
-
name
- 名称,或者对于未命名模块为空字符串 - 返回值:
-
命名模块元素,如果找不到则返回
null
- 自 JDK 版本:
- 9
- 参见:
-
getAllModuleElements
返回当前环境中的所有模块元素。如果没有模块存在,则返回一个空集。没有模块存在的一种情况是当环境不包括模块时,例如配置为不包含模块的注解处理环境,如配置为没有模块的源版本。- API 注释:
- 当环境包括模块时,可能会返回命名模块和未命名模块。
- 实现要求:
- 此方法的默认实现返回一个空集。
- 返回值:
- 已知模块元素,如果没有模块则返回一个空集
- 自 JDK 版本:
- 9
- 参见:
-
getElementValuesWithDefaults
Map<? extends ExecutableElement,? extends AnnotationValue> getElementValuesWithDefaults(AnnotationMirror a) 返回注解元素的值,包括默认值。- 参数:
-
a
- 要检查的注解 - 返回值:
- 注解元素的值,包括默认值
- 参见:
-
getDocComment
返回元素的文档("Javadoc")注释文本。元素的文档注释是以"
/**
"开头,以单独的"*/
"结尾,并紧随元素之前的注释,忽略空格。因此,文档注释至少包含三个"*
"字符。返回的文档注释文本是注释的处理形式,就像在源代码中出现的那样。去掉文档注释的开头"/**
"和结尾"*/
"。对于注释的行,从初始"/**
"之后开始的行,去掉前导空格字符,以及在空格之后或行首出现的任何连续"*
"字符。然后将处理后的行连接在一起(包括行终止符)并返回。- 参数:
-
e
- 要检查的元素 - 返回值:
-
元素的文档注释,如果没有则返回
null
- 参见 Java 语言规范:
-
3.6 空格
-
isDeprecated
如果元素已过时,则返回true
,否则返回false
。- 参数:
-
e
- 要检查的元素 - 返回值:
-
如果元素已过时,则返回
true
,否则返回false
-
getOrigin
返回给定元素的来源。请注意,如果此方法返回
EXPLICIT
并且元素是从类文件创建的,则该元素实际上可能不对应于源代码中显式声明的构造。这是由于类文件格式在保留来自源代码的信息方面的准确性限制。例如,至少某些版本的类文件格式不保留程序员是否显式声明了构造函数或隐式声明为默认构造函数的信息。- 实现要求:
-
此方法的默认实现返回
EXPLICIT
。 - 参数:
-
e
- 要检查的元素 - 返回值:
- 给定元素的来源
- 自 JDK 版本:
- 9
-
getOrigin
返回给定注解镜像的来源。如果注解镜像是用于保存可重复注解接口的重复注解的隐式声明的容器注解,则注解镜像是强制性的。请注意,如果此方法返回
EXPLICIT
并且注解镜像是从类文件创建的,则该元素实际上可能不对应于源代码中显式声明的构造。这是由于类文件格式在保留来自源代码的信息方面的准确性限制。例如,至少某些版本的类文件格式不保留程序员是否显式声明了注解或隐式声明为容器注解的信息。- 实现要求:
-
此方法的默认实现返回
EXPLICIT
。 - 参数:
-
c
- 注解镜像修改的构造 -
a
- 要检查的注解镜像 - 返回值:
- 给定注解镜像的来源
- 参见 Java 语言规范:
-
9.6.3 可重复注解接口
9.7.5 相同接口的多个注解
- 自 JDK 版本:
- 9
-
getOrigin
返回给定模块指令的来源。请注意,如果此方法返回
EXPLICIT
并且模块指令是从类文件创建的,则该模块指令实际上可能不对应于源代码中显式声明的构造。这是由于类文件格式在保留来自源代码的信息方面的准确性限制。例如,至少某些版本的类文件格式不保留程序员是否显式声明了uses
指令或作为合成构造添加的信息。请注意,如果由于类文件格式在保留来自源代码的信息方面的准确性限制,实现可能无法可靠地确定指令的来源状态,则无法从类文件创建指令。
- 实现要求:
-
此方法的默认实现返回
EXPLICIT
。 - 参数:
-
m
- 指令的模块 -
directive
- 要检查的模块指令 - 返回值:
- 给定模块指令的来源
- 自 JDK 版本:
- 9
-
isBridge
如果可执行元素是桥接方法,则返回true
,否则返回false
。- 实现要求:
-
此方法的默认实现返回
false
。 - 参数:
-
e
- 要检查的可执行元素 - 返回值:
-
如果可执行元素是桥接方法,则返回
true
,否则返回false
- 自 JDK 版本:
- 9
-
getBinaryName
返回类型元素的二进制名称。- 参数:
-
type
- 要检查的类型元素 - 返回值:
- 类型元素的二进制名称
- 参见 Java 语言规范:
-
13.1 二进制形式
- 参见:
-
getPackageOf
- 参数:
-
e
- 要检查的元素 - 返回值:
- 元素的包
-
getModuleOf
返回元素的模块。模块的模块是它本身。如果包的封装元素是模块,则该模块是包的模块。如果包的封装元素是null
,则对于包的模块返回null
。(包可能具有null
模块的一种情况是,如果环境不包括模块,例如配置为不包含模块的注解处理环境,如配置为没有模块的源版本。)否则,元素的模块等于元素的包的模块的模块。- 实现要求:
-
此方法的默认实现返回
null
。 - 参数:
-
e
- 要检查的元素 - 返回值:
- 元素的模块
- 自 JDK 版本:
- 9
-
getAllMembers
返回类型元素的所有成员,无论是继承的还是直接声明的。对于类,结果还包括其构造函数,但不包括局部类或匿名类。- API 注释:
-
可以使用
ElementFilter
中的方法来隔离某些类型的元素。 - 参数:
-
type
- 要检查的类型 - 返回值:
- 类型的所有成员
- 参见:
-
getOutermostTypeElement
- 实现要求:
-
此方法的默认实现首先检查参数的类型。对于
PACKAGE
、MODULE
和OTHER
类型的元素,将返回null
。对于其他类型的元素,将检查该元素是否为顶层类或接口。如果是,则返回该元素;否则,将遵循封闭元素链,直到找到顶层类或接口。返回最终顶层类或接口的元素。 - 参数:
-
e
- 要检查的元素 - 返回:
-
元素所包含的最外层类型元素(如果存在这样的包含元素);否则返回
null
- 自:
- 18
- 参见:
-
getAllAnnotationMirrors
返回元素上存在的所有注解,无论是直接存在还是通过继承存在。请注意,此方法返回的任何注解都是声明注解。
- 参数:
-
e
- 要检查的元素 - 返回:
- 元素的所有注解
- 参见:
-
hides
测试一个类型、方法或字段是否隐藏另一个。- 参数:
-
hider
- 第一个元素 -
hidden
- 第二个元素 - 返回:
-
如果第一个元素隐藏第二个元素,则返回
true
- 参见《Java语言规范》:
-
8.4.8 继承、覆盖和隐藏
-
overrides
测试一个方法作为给定类或接口的成员是否覆盖另一个方法。当一个非抽象方法覆盖一个抽象方法时,前者也被称为实现后者。如JLS 8.4.8.1所示,一个方法不会覆盖自身。覆盖关系是非自反的。在最简单和最典型的用法中,
type
参数的值将简单地是直接包含overrider
(可能覆盖的方法)的类或接口。例如,假设m1
表示方法String.hashCode
,m2
表示Object.hashCode
。然后我们可以询问m1
是否在类String
内覆盖m2
(是的):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
- 参见《Java语言规范》:
-
8.4.8 继承、覆盖和隐藏
9.4.1 继承和覆盖
-
getConstantExpression
返回表示原始值或字符串的常量表达式的文本。返回的文本以适合在源代码中表示该值的形式呈现。- 参数:
-
value
- 原始值或字符串 - 返回:
- 常量表达式的文本
- 异常:
-
IllegalArgumentException
- 如果参数不是原始值或字符串 - 参见:
-
printElements
在指定的顺序将元素的表示打印到给定的写入器中。此方法的主要目的是用于诊断。输出的确切格式未指定,可能会更改。- 参数:
-
w
- 要打印输出的写入器 -
elements
- 要打印的元素
-
getName
返回与参数具有相同字符序列的名称。- 参数:
-
cs
- 要作为名称返回的字符序列 - 返回:
- 与参数具有相同字符序列的名称
-
isFunctionalInterface
如果类型元素是函数式接口,则返回true
,否则返回false
。- 参数:
-
type
- 要检查的类型元素 - 返回:
-
如果类型元素是函数式接口,则返回
true
,否则返回false
- 参见《Java语言规范》:
-
9.8 函数式接口
- 自:
- 1.8
-
isAutomaticModule
如果模块元素是自动模块,则返回true
,否则返回false
。- 实现要求:
-
此方法的默认实现返回
false
。 - 参数:
-
module
- 要检查的模块元素 - 返回:
-
如果模块元素是自动模块,则返回
true
,否则返回false
- 参见《Java语言规范》:
-
7.7.1 依赖关系
- 自:
- 17
-
recordComponentFor
返回给定访问器的记录组件。如果给定方法不是记录组件访问器,则返回null
。- 实现要求:
-
此方法的默认实现检查访问器所在元素的类型是否为
RECORD
,如果是,则通过调用ElementFilter.recordComponentsIn(Iterable)
检索访问器所在元素的所有记录组件。如果检索到的至少一个记录组件的访问器恰好等于作为参数传递给此方法的访问器,则返回该记录组件;否则返回null
。 - 参数:
-
accessor
- 要查找记录组件的方法。 - 返回:
-
记录组件,如果给定方法不是记录组件访问器,则返回
null
- 自:
- 16
-
isCanonicalConstructor
如果可确定可执行元素是记录的规范构造函数,则返回true
,否则返回false
。请注意,在某些情况下可能没有足够的信息来确定构造函数是否是规范构造函数,例如,如果可执行元素是由类文件支持的。在这种情况下,将返回false
。- 实现要求:
-
此方法的默认实现无条件返回
false
。 - 参数:
-
e
- 要检查的可执行元素 - 返回:
-
如果可确定可执行元素是记录的规范构造函数,则返回
true
,否则返回false
- 参见《Java语言规范》:
-
8.10.4.1 普通规范构造函数
- 自:
- 20
-
isCompactConstructor
如果可确定可执行元素是记录的紧凑构造函数,则返回true
,否则返回false
。根据定义,紧凑构造函数也是一个规范构造函数。请注意,在某些情况下可能没有足够的信息来确定构造函数是否是紧凑构造函数,例如,如果可执行元素是由类文件支持的。在这种情况下,将返回false
。- 实现要求:
-
该方法的默认实现无条件地返回
false
。 - 参数:
-
e
- 被检查的可执行元素 - 返回:
-
如果可确定可执行元素是记录的紧凑构造函数,则返回
true
,否则返回false
- 参见 Java 语言规范:
-
8.10.4.2 紧凑规范构造函数
- 自 JDK 版本:
- 20
-
getFileObjectOf
返回此元素的文件对象,如果没有这样的文件对象则返回null
。返回的文件对象是用于构造元素的信息的参考表示。例如,在编译或注解处理期间,类
Foo
的源文件编译成类文件,为代表Foo
的元素返回的文件对象将是源文件,而不是类文件。实现可以选择不支持此方法的功能,在这种情况下会抛出
UnsupportedOperationException
。在注解处理的上下文中,如果元素作为初始输入的一部分包含,或者包含文件是在注解处理工具运行期间创建的,则返回非
null
值。否则,可能返回null
。在注解处理中,如果创建了一个类文件,那么该类文件可以作为元素的参考表示。如果有文件对象,包的文件对象将是一个
package-info
文件。即使包(隐式地)是在注解处理运行期间从该包的源文件或类文件的创建中创建的,也可能存在包而没有任何package-info
文件。一个未命名包将具有null
文件,因为它不能在编译单元中声明。如果有文件对象,模块的文件对象将是一个
module-info
文件。一个未命名模块将具有null
文件,因为它不能在编译单元中声明。一个自动模块将具有null
文件,因为它是隐式声明的。如果有文件对象,顶层
public
类或接口的文件对象将是与该类或接口对应的源文件或类文件。在这种情况下,文件的名称前导部分通常与类或接口的名称匹配。单个编译单元可以定义多个顶层类和接口,例如一个主要的public
类或接口,其名称与文件名对应,以及一个或多个名称不与文件名对应的辅助类或接口。如果源文件提供了辅助类或接口的参考表示,则返回主类的文件。(辅助类或接口也可以在package-info
源文件中定义,在这种情况下返回package-info
文件的文件。)如果类文件提供了辅助类或接口的参考表示,则返回辅助类的单独类文件。对于嵌套类或接口,如果有文件对象:
- 如果源文件提供了参考表示,则文件对象将是最外层封闭类或接口的文件对象
- 如果类文件提供了参考表示,则文件对象将是嵌套类或接口本身的文件对象
对于其他词法上封闭的元素,如变量、方法和构造函数,如果它们有文件对象,则文件对象将是与词法上封闭元素的封闭元素相关联的对象。
- 实现要求:
-
默认实现无条件地抛出
UnsupportedOperationException
。 - 参数:
-
e
- 要查找文件对象的元素 - 返回:
-
此元素的文件对象,如果没有这样的文件对象则返回
null
- 抛出:
-
UnsupportedOperationException
- 如果不支持此功能 - 自 JDK 版本:
- 18
-