Module java.compiler

Interface ElementVisitor<R,P>

类型参数:
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方法。

实现此接口的类可能会或可能不会在附加参数pnull时抛出NullPointerException;有关详细信息,请参阅实现类的文档。

API 注意:
警告: 可能会向此接口添加方法以适应未来版本的Java编程语言中添加的新的、当前未知的语言结构。已经添加了这样的补充以支持此API引入后添加的语言特性。直接实现此接口的访问者类可能与平台的未来版本不兼容。为避免此源不兼容性,建议访问者实现应该扩展实现此接口的适当抽象访问者类。但是,API通常应该使用此访问者接口作为参数、返回类型等的类型,而不是其中一个抽象类。

预计将添加用于适应新语言结构的方法作为默认方法,以提供强大的源代码兼容性,就像为visitModulevisitRecordComponent所做的那样。默认方法的实现将调用visitUnknown,这种行为将在支持具有新语言结构的源版本的具体访问者中被覆盖。

util包中有几个类系实现了此访问者接口。这些类系遵循类似FooVisitorN的命名模式,其中N表示访问者适用的源版本。特别是,FooVisitorN预计将处理源版本N中存在的所有语言结构。如果在版本N之后没有添加新的语言结构(或后续发布), FooVisitorN也可以处理稍后的源版本;在这种情况下, FooVisitorN类上的SupportedSourceVersion注解将指示较新版本。当访问代表在源版本N之后引入的语言结构的元素时, FooVisitorN将抛出一个UnknownElementException,除非该行为被覆盖。

在选择要子类化的访问者系列成员时,子类化最近的一个会增加所覆盖的源版本范围。在选择要子类化的访问者系列时,考虑它们的内置功能:

自版本:
1.6
  • Method Details

    • visit

      R visit(Element e, P p)
      访问一个元素。
      参数:
      e - 要访问的元素
      p - 访问者指定的参数
      返回:
      访问者指定的结果
    • visit

      default R visit(Element e)
      一个等效于visit(e, null)的便利方法。
      实现要求:
      默认实现是visit(e, null)
      参数:
      e - 要访问的元素
      返回:
      访问者指定的结果
    • visitPackage

      R visitPackage(PackageElement e, P p)
      访问一个包元素。
      参数:
      e - 要访问的元素
      p - 访问者指定的参数
      返回:
      访问者指定的结果
    • visitType

      R visitType(TypeElement e, P p)
      访问一个类型元素。
      参数:
      e - 要访问的元素
      p - 访问者指定的参数
      返回:
      访问者指定的结果
    • visitVariable

      R visitVariable(VariableElement e, P p)
      访问一个变量元素。
      参数:
      e - 要访问的元素
      p - 访问者指定的参数
      返回:
      访问者指定的结果
    • visitExecutable

      R visitExecutable(ExecutableElement e, P p)
      访问一个可执行元素。
      参数:
      e - 要访问的元素
      p - 访问者指定的参数
      返回:
      访问者指定的结果
    • visitTypeParameter

      R visitTypeParameter(TypeParameterElement e, P p)
      访问一个类型参数元素。
      参数:
      e - 要访问的元素
      p - 访问者指定的参数
      返回:
      访问者指定的结果
    • visitUnknown

      R visitUnknown(Element e, P p)
      访问一种未知类型的元素。如果语言演变并向Element层次结构添加新类型的元素,则可能会发生这种情况。
      参数:
      e - 要访问的元素
      p - 访问者指定的参数
      返回:
      访问者指定的结果
      抛出:
      UnknownElementException - 访问者实现可以选择抛出此异常
    • visitModule

      default R visitModule(ModuleElement e, P p)
      访问一个模块元素。
      实现要求:
      默认实现通过调用visitUnknown(e, p)访问ModuleElement
      参数:
      e - 要访问的元素
      p - 访问者指定的参数
      返回:
      访问者指定的结果
      自版本:
      9
    • visitRecordComponent

      default R visitRecordComponent(RecordComponentElement e, P p)
      访问一个记录组件元素。
      实现要求:
      默认实现通过调用visitUnknown(e, p)访问RecordComponentElement
      参数:
      e - 要访问的元素
      p - 访问者指定的参数
      返回:
      访问者指定的结果
      自 JDK 版本:
      16