1

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

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

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

我声明了一个这样的记录类:</p>

public record User(@A @B long id, String name, int age) {}

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

Annotation[] annotations = fields[0].getAnnotations();

但是大小annotations是一个,我只得到了@B,这是为什么呢?谢谢

4

1 回答 1

7

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

  • 字段
  • 访问器方法
  • 构造函数参数
  • 记录组件本身。

这些由注释是否适用于

  • FIELD
  • METHOD
  • PARAMETER
  • RECORD_COMPONENT

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

于 2021-04-14T16:28:35.913 回答