Module java.compiler

Interface AnnotationValueVisitor<R,P>

类型参数:
R - 此访问者方法的返回类型
P - 此访问者方法的附加参数的类型。
所有已知的实现类:
AbstractAnnotationValueVisitor14, AbstractAnnotationValueVisitor6, AbstractAnnotationValueVisitor7, AbstractAnnotationValueVisitor8, AbstractAnnotationValueVisitor9, SimpleAnnotationValueVisitor14, SimpleAnnotationValueVisitor6, SimpleAnnotationValueVisitor7, SimpleAnnotationValueVisitor8, SimpleAnnotationValueVisitor9

public interface AnnotationValueVisitor<R,P>
注解接口元素值的访问者,使用访问者设计模式的变体。与标准访问者根据类型层次结构中成员的具体类型进行分派不同,此访问者根据存储的数据类型进行分派;例如,没有用于存储boolean值与int值等的不同子类。实现此接口的类用于在编译时未知该值的类型时对值进行操作。当将访问者传递给值的accept方法时,将调用适用于该值的visitXyz方法。

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

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

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

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

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

自从:
1.6
  • Method Details

    • visit

      R visit(AnnotationValue av, P p)
      访问注解值。
      参数:
      av - 要访问的值
      p - 访问者指定的参数
      返回:
      访问者指定的结果
    • visit

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

      R visitBoolean(boolean b, P p)
      访问注解中的boolean值。
      参数:
      b - 正在访问的值
      p - 访问者指定的参数
      返回:
      访问的结果
    • visitByte

      R visitByte(byte b, P p)
      访问注解中的byte值。
      参数:
      b - 正在访问的值
      p - 访问者指定的参数
      返回:
      访问的结果
    • visitChar

      R visitChar(char c, P p)
      访问注解中的char值。
      参数:
      c - 正在访问的值
      p - 访问者指定的参数
      返回:
      访问的结果
    • visitDouble

      R visitDouble(double d, P p)
      访问注解中的double值。
      参数:
      d - 正在访问的值
      p - 访问者指定的参数
      返回:
      访问的结果
    • visitFloat

      R visitFloat(float f, P p)
      访问注解中的float值。
      参数:
      f - 正在访问的值
      p - 访问者指定的参数
      返回:
      访问的结果
    • visitInt

      R visitInt(int i, P p)
      访问注解中的int值。
      参数:
      i - 正在访问的值
      p - 访问者指定的参数
      返回:
      访问的结果
    • visitLong

      R visitLong(long i, P p)
      访问注解中的long值。
      参数:
      i - 正在访问的值
      p - 访问者指定的参数
      返回:
      访问的结果
    • visitShort

      R visitShort(short s, P p)
      访问注解中的short值。
      参数:
      s - 正在访问的值
      p - 访问者指定的参数
      返回:
      访问的结果
    • visitString

      R visitString(String s, P p)
      访问注解中的字符串值。
      参数:
      s - 正在访问的值
      p - 访问者指定的参数
      返回:
      访问的结果
    • visitType

      R visitType(TypeMirror t, P p)
      访问注解中的类型值。
      参数:
      t - 正在访问的值
      p - 访问者指定的参数
      返回:
      访问的结果
    • visitEnumConstant

      R visitEnumConstant(VariableElement c, P p)
      访问注解中的enum值。
      参数:
      c - 正在访问的值
      p - 访问者指定的参数
      返回:
      访问的结果
    • visitAnnotation

      R visitAnnotation(AnnotationMirror a, P p)
      访问注解中的注解值。
      参数:
      a - 正在访问的值
      p - 访问者指定的参数
      返回:
      访问的结果
    • visitArray

      R visitArray(List<? extends AnnotationValue> vals, P p)
      访问注解中的数组值。
      参数:
      vals - 被访问的值
      p - 访问者指定的参数
      返回:
      访问的结果
    • visitUnknown

      R visitUnknown(AnnotationValue av, P p)
      访问未知类型的注解值。如果语言发展并且可以在注解中存储新类型的值,则可能会发生这种情况。
      参数:
      av - 被访问的未知值
      p - 访问者指定的参数
      返回:
      访问的结果
      抛出:
      UnknownAnnotationValueException - 访问者实现可以选择抛出此异常