Module java.compiler

Interface TypeVisitor<R,P>

类型参数:
R - 此访问者方法的返回类型。对于不需要返回结果的访问者,请使用Void
P - 此访问者方法的附加参数的类型。对于不需要附加参数的访问者,请使用Void
所有已知的实现类:
AbstractTypeVisitor14, AbstractTypeVisitor6, AbstractTypeVisitor7, AbstractTypeVisitor8, AbstractTypeVisitor9, SimpleTypeVisitor14, SimpleTypeVisitor6, SimpleTypeVisitor7, SimpleTypeVisitor8, SimpleTypeVisitor9, TypeKindVisitor14, TypeKindVisitor6, TypeKindVisitor7, TypeKindVisitor8, TypeKindVisitor9

public interface TypeVisitor<R,P>
类型访问者,采用访问者设计模式。实现此接口的类用于在编译时未知类型的情况下操作类型。当将访问者传递给类型的accept方法时,将调用最适用于该类型的visitXyz方法。

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

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

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

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

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

  • AbstractTypeVisitors: 骨架访问者实现。
  • SimpleTypeVisitors: 支持默认操作和默认返回值。
  • TypeKindVisitors: 以每种类型的粒度提供访问方法,因为某些类型类别可能有多种类型。
  • 自版本:
    1.6
    • Method Details

      • visit

        R visit(TypeMirror t, P p)
        访问一个类型。
        参数:
        t - 要访问的类型
        p - 访问者指定的参数
        返回:
        访问者指定的结果
      • visit

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

        R visitPrimitive(PrimitiveType t, P p)
        访问一个原始类型。
        参数:
        t - 要访问的类型
        p - 访问者指定的参数
        返回:
        访问者指定的结果
      • visitNull

        R visitNull(NullType t, P p)
        访问空类型。
        参数:
        t - 要访问的类型
        p - 访问者指定的参数
        返回:
        访问者指定的结果
      • visitArray

        R visitArray(ArrayType t, P p)
        访问一个数组类型。
        参数:
        t - 要访问的类型
        p - 访问者指定的参数
        返回:
        访问者指定的结果
      • visitDeclared

        R visitDeclared(DeclaredType t, P p)
        访问一个声明类型。
        参数:
        t - 要访问的类型
        p - 访问者指定的参数
        返回:
        访问者指定的结果
      • visitError

        R visitError(ErrorType t, P p)
        访问一个错误类型。
        参数:
        t - 要访问的类型
        p - 访问者指定的参数
        返回:
        访问者指定的结果
      • visitTypeVariable

        R visitTypeVariable(TypeVariable t, P p)
        访问一个类型变量。
        参数:
        t - 要访问的类型
        p - 访问者指定的参数
        返回:
        访问者指定的结果
      • visitWildcard

        R visitWildcard(WildcardType t, P p)
        访问一个通配符类型。
        参数:
        t - 要访问的类型
        p - 访问者指定的参数
        返回:
        访问者指定的结果
      • visitExecutable

        R visitExecutable(ExecutableType t, P p)
        访问一个可执行类型。
        参数:
        t - 要访问的类型
        p - 访问者指定的参数
        返回:
        访问者指定的结果
      • visitNoType

        R visitNoType(NoType t, P p)
        访问一个NoType实例。
        参数:
        t - 要访问的类型
        p - 访问者指定的参数
        返回:
        访问者指定的结果
      • visitUnknown

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

        R visitUnion(UnionType t, P p)
        访问一个联合类型。
        参数:
        t - 要访问的类型
        p - 访问者指定的参数
        返回:
        访问者指定的结果
        自版本:
        1.7
      • visitIntersection

        R visitIntersection(IntersectionType t, P p)
        访问一个交集类型。
        参数:
        t - 要访问的类型
        p - 访问者指定的参数
        返回:
        访问者指定的结果
        自版本:
        1.8