【发布时间】:2021-12-23 19:40:34
【问题描述】:
我有记录:
public record Thing(
Boolean field1,
EnumType field2,
int field3,
String, field4
. . .
我在Thing 中添加了很多新字段,这破坏了我所有使用规范构造函数的代码,并且字段堆积如山,这使得规范构造函数越来越难用。
我想做的是能够为任意字段传递特定值:
new Thing(field3 = 1, field4 = "XXX");
new Thing(field1 = true, field2 = ENUMVALUE);
现在,我知道我可以做如下构造函数:
Thing(int i, String s) ...
Thing(Boolean b, EnumType, e) ...
. . .
new Thing(1, "XXX");
new Thing(true, ENUMVALUE);
但这确实是一种不知道我想要覆盖哪些字段的默认值的情况。到目前为止,我唯一能想到的就是将 Thing 变成一个常规对象,这样我就可以执行以下操作:
new Thing().setField1(true).setField4("Blah");
这有点令人沮丧,因为我不希望值在初始化后就可变。
【问题讨论】:
-
如果它是一个常规对象,您将无法将字段设置为最终的???
-
我不确定我是否遵循,但 Java 记录是不可变的。因此,您不能在构造对象后设置值。这意味着必须通过构造函数注入所有值。也许你可以做一个包含其他记录的Java记录。
-
你也可以使用 builder 模式。