- 类型参数:
-
R- 此访问者方法的返回类型。对于不需要返回结果的访问者,请使用Void。 -
P- 此访问者方法的附加参数的类型。对于不需要附加参数的访问者,请使用Void。
- 所有已知的实现类:
-
AbstractElementVisitor14,AbstractElementVisitor6,AbstractElementVisitor7,AbstractElementVisitor8,AbstractElementVisitor9,ElementKindVisitor14,ElementKindVisitor6,ElementKindVisitor7,ElementKindVisitor8,ElementKindVisitor9,ElementScanner14,ElementScanner6,ElementScanner7,ElementScanner8,ElementScanner9,SimpleElementVisitor14,SimpleElementVisitor6,SimpleElementVisitor7,SimpleElementVisitor8,SimpleElementVisitor9
public interface ElementVisitor<R,P>
以访问者设计模式的风格访问程序元素的访问者。实现此接口的类用于在编译时元素的种类未知时对元素进行操作。当将访问者传递给元素的
accept方法时,将调用最适用于该元素的visitXyz方法。
实现此接口的类可能会或可能不会在附加参数p为null时抛出NullPointerException;有关详细信息,请参阅实现类的文档。
- API 注意:
-
警告: 可能会向此接口添加方法以适应未来版本的Java编程语言中添加的新的、当前未知的语言结构。已经添加了这样的补充以支持此API引入后添加的语言特性。直接实现此接口的访问者类可能与平台的未来版本不兼容。为避免此源不兼容性,建议访问者实现应该扩展实现此接口的适当抽象访问者类。但是,API通常应该使用此访问者接口作为参数、返回类型等的类型,而不是其中一个抽象类。
预计将添加用于适应新语言结构的方法作为默认方法,以提供强大的源代码兼容性,就像为
visitModule和visitRecordComponent所做的那样。默认方法的实现将调用visitUnknown,这种行为将在支持具有新语言结构的源版本的具体访问者中被覆盖。在util包中有几个类系实现了此访问者接口。这些类系遵循类似
FooVisitorN的命名模式,其中N表示访问者适用的源版本。特别是,FooVisitorN预计将处理源版本N中存在的所有语言结构。如果在版本N之后没有添加新的语言结构(或后续发布),FooVisitorN也可以处理稍后的源版本;在这种情况下,FooVisitorN类上的SupportedSourceVersion注解将指示较新版本。当访问代表在源版本N之后引入的语言结构的元素时,FooVisitorN将抛出一个UnknownElementException,除非该行为被覆盖。在选择要子类化的访问者系列成员时,子类化最近的一个会增加所覆盖的源版本范围。在选择要子类化的访问者系列时,考虑它们的内置功能:
AbstractElementVisitors: 骨架访问者实现。SimpleElementVisitors: 支持默认操作和默认返回值。ElementKindVisitors: 以每种元素提供的访问方法,因为某些类别的元素可能具有多种种类。ElementScanners: 扫描器是遍历元素及其封闭和与之关联的元素的访问者。
- 自版本:
- 1.6
-
Method Summary
Modifier and TypeMethodDescriptiondefault R一个等效于visit(e, null)的便利方法。访问一个元素。访问一个可执行元素。default RvisitModule(ModuleElement e, P p) 访问一个模块元素。visitPackage(PackageElement e, P p) 访问一个包元素。default R访问一个记录组件元素。visitType(TypeElement e, P p) 访问一个类型元素。访问一个类型参数元素。visitUnknown(Element e, P p) 访问一种未知类型的元素。visitVariable(VariableElement e, P p) 访问一个变量元素。
-
Method Details
-
visit
访问一个元素。- 参数:
-
e- 要访问的元素 -
p- 访问者指定的参数 - 返回:
- 访问者指定的结果
-
visit
一个等效于visit(e, null)的便利方法。- 实现要求:
-
默认实现是
visit(e, null)。 - 参数:
-
e- 要访问的元素 - 返回:
- 访问者指定的结果
-
visitPackage
访问一个包元素。- 参数:
-
e- 要访问的元素 -
p- 访问者指定的参数 - 返回:
- 访问者指定的结果
-
visitType
访问一个类型元素。- 参数:
-
e- 要访问的元素 -
p- 访问者指定的参数 - 返回:
- 访问者指定的结果
-
visitVariable
访问一个变量元素。- 参数:
-
e- 要访问的元素 -
p- 访问者指定的参数 - 返回:
- 访问者指定的结果
-
visitExecutable
访问一个可执行元素。- 参数:
-
e- 要访问的元素 -
p- 访问者指定的参数 - 返回:
- 访问者指定的结果
-
visitTypeParameter
访问一个类型参数元素。- 参数:
-
e- 要访问的元素 -
p- 访问者指定的参数 - 返回:
- 访问者指定的结果
-
visitUnknown
访问一种未知类型的元素。如果语言演变并向Element层次结构添加新类型的元素,则可能会发生这种情况。- 参数:
-
e- 要访问的元素 -
p- 访问者指定的参数 - 返回:
- 访问者指定的结果
- 抛出:
-
UnknownElementException- 访问者实现可以选择抛出此异常
-
visitModule
访问一个模块元素。- 实现要求:
-
默认实现通过调用
visitUnknown(e, p)访问ModuleElement。 - 参数:
-
e- 要访问的元素 -
p- 访问者指定的参数 - 返回:
- 访问者指定的结果
- 自版本:
- 9
-
visitRecordComponent
访问一个记录组件元素。- 实现要求:
-
默认实现通过调用
visitUnknown(e, p)访问RecordComponentElement。 - 参数:
-
e- 要访问的元素 -
p- 访问者指定的参数 - 返回:
- 访问者指定的结果
- 自 JDK 版本:
- 16
-