当前位置: 首页 > 知识库问答 >
问题:

Java 16 Annotation ElementType(Java 16注释元素类型)。无法反映RECORD_COMPONENT

关正雅
2023-03-14

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

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

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

我声明了这样一个记录类:

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

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

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

注释的大小是一,我只得到了@B,这是为什么?谢谢

共有1个答案

殷宾白
2023-03-14

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

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

这些是通过注释是否适用于

  • FIELD
  • 方法
  • 参数
  • RECORD_COMPONENT

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

 类似资料:
  • 我想将对象封送到XML。 但是,除以下情况外,它失败了: 事实上,这个注释是存在的(对于父类和交付的类): 儿童班: 它在该方法中完全失败: 它应该起作用,但不应该。 我找不到这里遗漏或错误的地方。 更新: 以下是测试片段: 我从CSV文件中获取日期,并将其转换为DTO对象。此方法返回给我FreightOfferDetail 以下是此方法的片段: 在这种情况下,如何将对象封送到XML文件?

  • 我试图通过使用多个测试数据在Cucumber DataTable中使用映射来自动化一个场景。在本测试中,我们将向测试步骤传递两次Username和Password。所以我们的测试应该输入用户名和密码一次,点击登录按钮,并重复相同的步骤再次。 我已经尝试使用for循环来使用Maps集合重复测试。1.我收到一个错误,表示类型不匹配:无法从元素类型2。当我将其转换为时,我得到另一个错误,说明方法send

  • 对于下面的Page对象示例类,我有一个accountsLink私有成员,它在加载时映射到登录页面上的非动态元素。当从构造函数调用initElements方法时,使用FindBy批注对其进行初始化。 现在问题来了。我有另一个元素(signInButton),它只在您单击accountsLink元素时才动态加载。此操作不会将您带到另一个页面,而只会打开一个ajax菜单,其中会出现登录按钮。 我的问题是

  • 石英创建方法

  • 问题内容: 我试图在一个元素上拍两个或多个相同类型的注释,在这种情况下是方法。这是我正在使用的近似代码: 编译以上内容时,javac抱怨重复的注释: 这样根本不可能重复注释吗?从学步上讲,上面的两个@Foo实例是否由于内容不同而不同吗? 如果上述方法不可行,有哪些可能的解决方法? 更新:我被要求描述我的用例。开始。 我正在建立一种语法糖化机制,以“映射” POJO到文档存储(例如MongoDB)。

  • 问题内容: 我的Java模型上有一个枚举类型,我想映射到数据库中的表。我正在使用“hibernate注释”,但我不知道该怎么做。由于我搜索的答案比较旧,我想知道哪种方法最好? 提前致谢 问题答案: 除了注释,您还需要其他东西吗?例如,以下枚举: 可以这样使用和注释: 您可以使用批注的enum属性指定枚举应如何在数据库中持久化。指定该枚举将作为整数值保留。在这里,设置为将永久保存为0,保留为1,依此