- 类型参数:
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 注意:
- WARNING: 可能会向此接口添加方法,以适应添加到 Java 编程语言未来版本中的新的、当前未知的语言结构。此类添加已经发生,以支持引入此 API 后添加的语言功能。直接实现此接口的访问者类可能与平台的未来版本不兼容。为避免这种源不兼容,鼓励访问者实现改为扩展实现此接口的适当抽象访问者类。但是,API 通常应该使用此访问者接口作为参数类型、返回类型等,而不是抽象类之一。
适应新语言结构的方法有望作为默认方法添加,以提供强大的源兼容性,就像
visitModule和visitRecordComponent所做的那样。默认方法的实现将依次调用visitUnknown,该行为将在支持具有新语言构造的源版本的具体访问者中被覆盖。在 工具包 中有几个实现此访问者接口的类家族。这些系列遵循
FooVisitor的命名模式N在哪里N表示访问者适合的 源版本。特别是FooVisitorN预计将处理源版本中存在的所有语言结构N.如果版本中没有添加新的语言结构N+ 1(或后续版本),FooVisitorN也可以处理后来的源版本;在这种情况下,FooVisitor上的SupportedSourceVersion注释N类将指示更高版本。当访问表示语言构造的元素时引入了after源版本N一个FooVisitorN将抛出UnknownElementException除非该行为被覆盖。在选择访问者家族的哪个成员进行子类化时,对最近的成员进行子类化会增加所涵盖的源版本的范围。在选择要子类化的访问者家族时,请考虑它们的内置功能:
AbstractElementVisitors:骨架访问者实现。SimpleElementVisitors:支持默认操作和默认返回值。ElementKindVisitors:在 每种 粒度上提供的访问方法,因为某些类别的元素可以有不止一种。ElementScanners:扫描器是遍历元素和元素封闭的 并与之关联的访问者。
- 自从:
- 1.6
-
方法总结
修饰符和类型方法描述default 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) 访问可变元素。
-
方法详情
-
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- 访问者指定的参数- 返回:
- 访问者指定的结果
- 自从:
- 16
-