模块 java.compiler

接口 AnnotatedConstruct

所有已知的子接口:
ArrayType , DeclaredType , Element , ErrorType , ExecutableElement , ExecutableType , IntersectionType , ModuleElement , NoType , NullType , PackageElement , Parameterizable , PrimitiveType , QualifiedNameable , RecordComponentElement , ReferenceType , TypeElement , TypeMirror , TypeParameterElement , TypeVariable , UnionType , VariableElement , WildcardType

public interface AnnotatedConstruct
表示可以注释的结构。构造是 elementtype 。元素上的注释位于 declaration 上,而类型上的注释位于类型名称的特定 use 上。定义为Java 语言规范section 9.7.4 ,元素上的注释是 declaration annotation ,类型上的注释是 type annotation 。术语 directly presentpresentindirectly presentassociated 在整个接口中使用,以准确描述此接口中的方法返回哪些注释(声明注释或类型注解)。

在下面的定义中,注解A有注解界面AI.如果AI是一个可重复的注解接口,包含注解的类型是AIC.

AnnotationAdirectly present在构造上C如果:

  • A明确或隐含 声明为适用于源代码表示C.

    通常,如果只有一个注解类型AI出现在代表的源代码中C, 然后A被明确声明为适用于C.类型注解AI记录组件 上可以隐式传播到附属的授权成员。修改记录组件类型的类型注解也可以传播到强制成员。向授权成员传播注释受规则中给出的规则约束Java 语言规范(JLS8.10.1)。如果有多个注解类型AI出现在C, 那么如果AI是可重复的注解接口,注解类型AIC隐式声明C.

  • 代表A出现在可执行输出中C,例如类文件的 RuntimeVisibleAnnotations (JVMS 4.7.16 ) 或 RuntimeVisibleParameterAnnotations (JVMS 4.7.17 ) 属性。

一个注解Apresent在构造上C如果:

  • A直接出现在C.
  • 没有类型注解AI直接出现在C, 和C是一个类并且AI是可继承的并且A存在于超类中C.
一个注解Aindirectly present在构造上C如果两者:
  • AI是一个可重复的注解接口,带有一个包含注解的接口AIC.
  • 类型注解AIC直接出现在CA是调用直接存在类型的注解的value方法的结果中包含的注解AIC.
一个注解Aassociated 有一个结构C如果:
  • A直接或间接存在于C.
  • 没有类型注解AI直接或间接存在于C, 和C是一个类,并且AI是可继承的,并且A与超类关联C.
Java 语言规范:
9.6 注解
9.6.4.3 @Inherited
9.7.4 注释可能出现的地方
9.7.5 同一接口的多个注解
自从:
1.8
  • 方法详情

    • getAnnotationMirrors

      List <? extends AnnotationMirror > getAnnotationMirrors()
      返回此构造上的 directly present 注释。
      返回:
      此构造上的注释 directly present;如果没有,则为空列表
    • getAnnotation

      <A extends Annotation > A getAnnotation(Class <A> annotationType)
      如果这样的注释是 present ,则返回此构造的指定类型的注解,否则返回 null

      此方法返回的注释可能包含一个值为 Class 类型的元素。该值不能直接返回:定位和加载类所需的信息(例如要使用的类加载器)不可用,并且该类可能根本无法加载。尝试通过对返回的注释调用相关方法来读取 Class 对象将导致 MirroredTypeException ,可以从中提取相应的 TypeMirror 。同样,尝试读取 Class[] 值元素将导致 MirroredTypesException

      笔记:此方法与此接口和相关接口中的其他方法不同。它对运行时反射信息(当前加载到 VM 中的注释接口的表示)进行操作,而不是对这些接口定义和使用的表示进行操作。因此,在返回的注解对象上调用方法会抛出许多在调用核心反射返回的注解对象上的方法时可能抛出的异常。此方法适用于编写为在一组已知的固定注释接口上进行操作的调用方。
      类型参数:
      A - 注释接口
      参数:
      annotationType——注解接口对应的Class对象
      返回:
      如果此类注解为 present ,则此构造的指定类型注解,否则为 null
      Java 语言规范:
      9.6.1 注解元素
      参见:
    • getAnnotationsByType

      <A extends Annotation > A[] getAnnotationsByType(Class <A> annotationType)
      返回带有此构造的 associated 注释。如果没有与此构造关联的注释,则返回值是长度为 0 的数组。直接或间接出现在构造上的注释的顺序C被计算为好像间接存在注解C直接出现在C代替它们的容器注解,按照它们在容器注解的值元素中出现的顺序。此方法与 getAnnotation(Class) 之间的区别在于,此方法检测其参数是否为 repeatable annotation interface ,如果是,则尝试通过“查看”容器注解来查找该类型的一个或多个注释。

      此方法返回的注释可能包含一个值为 Class 类型的元素。该值不能直接返回:定位和加载类所需的信息(例如要使用的类加载器)不可用,并且该类可能根本无法加载。尝试通过对返回的注释调用相关方法来读取 Class 对象将导致 MirroredTypeException ,可以从中提取相应的 TypeMirror 。同样,尝试读取 Class[] 值元素将导致 MirroredTypesException

      笔记:此方法与此接口和相关接口中的其他方法不同。它对运行时反射信息(当前加载到 VM 中的注释接口的表示)进行操作,而不是对这些接口定义和使用的表示进行操作。因此,在返回的注解对象上调用方法会抛出许多在调用核心反射返回的注解对象上的方法时可能抛出的异常。此方法适用于编写为在一组已知的固定注释接口上进行操作的调用方。
      类型参数:
      A - 注释接口
      参数:
      annotationType——注解接口对应的Class对象
      返回:
      如果存在于此构造上,则此构造针对指定注解类型的注解,否则为空数组
      Java 语言规范:
      9.6 注解
      9.6.1 注解元素
      参见: