Java 记录 - 测试 - 修改字段

Jos*_*uss 1 java testing reflection java-record

我有一个专门用于在运行时设置字段的测试框架。目的是设置测试用例。期待升级到 Java 14+ 记录,我注意到现有实用程序(例如ReflectionTestUtils.setFieldPropertyAccessorFactory.forDirectFieldAccess)适用于普通私有最终字段,但不适用于记录字段。

这是 JVM 的限制,还是这些实用程序的限制?

Hol*_*ger 5

由于修改了private finala的字段record,因此 it\xe2\x80\x99 不是 JVM 或 Java 执行环境的限制,因此依赖于修改此类字段的能力是这些实用程序的限制。

\n

文档setAccessible

\n
\n

此方法不能用于启用对不可修改的访问访问。以下字段不可修改:

\n
    \n
  • 在任何类或接口中声明的静态最终字段
  • \n
  • 在隐藏类中声明的最终字段
  • \n
  • 记录中声明的最终字段
  • \n
\n
\n

支持final通过访问覆盖写入实例字段的最初目的是允许在克隆或反序列化后修复对象状态。两者都不是必要的record

\n
    \n
  • 反序列化record实例将调用其构造函数,因此构造函数可以在分配最终字段之前应用所有必要的验证和修复。

    \n
  • \n
  • 创建一个浅克隆record根本没有意义。对于所有其他复制目的,您可以读取其所有组件,因为每个字段都有相应的访问器方法,调整它们,并将调整后的值传递给始终存在的规范构造函数。

    \n
  • \n
\n

  • 一个限制是缺少功能,但在这里,环境完全按照预期运行。您可以确定,永远不会支持在构造后更改“记录”字段。 (2认同)