模块 java.compiler

接口 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 注意:
WARNING: 可能会向此接口添加方法,以适应添加到 Java 编程语言未来版本中的新的、当前未知的语言结构。此类添加已经发生,以支持引入此 API 后添加的语言功能。直接实现此接口的访问者类可能与平台的未来版本不兼容。为避免这种源不兼容,鼓励访问者实现改为扩展实现此接口的适当抽象访问者类。但是,API 通常应该使用此访问者接口作为参数类型、返回类型等,而不是抽象类之一。

适应新语言结构的方法有望作为默认方法添加,以提供强大的源兼容性,就像 visitModule visitRecordComponent 所做的那样。默认方法的实现将依次调用 visitUnknown ,该行为将在支持具有新语言构造的源版本的具体访问者中被覆盖。

工具包 中有几个实现此访问者接口的类家族。这些系列遵循 FooVisitor 的命名模式N在哪里N表示访问者适合的 源版本。特别是 FooVisitorN预计将处理源版本中存在的所有语言结构N.如果版本中没有添加新的语言结构N+ 1(或后续版本), FooVisitorN也可以处理后来的源版本;在这种情况下, FooVisitor 上的 SupportedSourceVersion 注释N类将指示更高版本。当访问表示语言构造的元素时引入了after源版本N一个 FooVisitorN将抛出 UnknownElementException 除非该行为被覆盖。

在选择访问者家族的哪个成员进行子类化时,对最近的成员进行子类化会增加所涵盖的源版本的范围。在选择要子类化的访问者家族时,请考虑它们的内置功能:

自从:
1.6
  • 方法详情

    • 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 - 访问者指定的参数
      返回:
      访问者指定的结果
      自从:
      16