Java 16 Annotation ElementType.RECORD_COMPONENT 无法反映

Has*_*ang 1 java reflection java-record java-16

使用 JDK 16,我声明了两个注释:

@Target({ ElementType.RECORD_COMPONENT})
@Retention(RetentionPolicy.RUNTIME)
public @interface A {}

@Target({ ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface B {}

Run Code Online (Sandbox Code Playgroud)

我声明了一个像这样的记录类?

public record User(@A @B long id, String name, int age) {}
Run Code Online (Sandbox Code Playgroud)

然后我使用反射来获取id的注解,即:

Annotation[] annotations = fields[0].getAnnotations();
Run Code Online (Sandbox Code Playgroud)

但是 的大小annotations是 1 而我只有@B,这是为什么呢?谢谢

Bri*_*etz 6

记录组件上的注释可能会传播到类文件中的四个位置:

  • 领域
  • 存取方法
  • 构造函数参数
  • 记录组件本身。

这些由注释是否适用于

  • FIELD
  • METHOD
  • PARAMETER
  • RECORD_COMPONENT

它将传播到所有适用的地方。如果它不适用于其中任何一个,则在编译时被拒绝。