【发布时间】:2022-08-23 02:27:23
【问题描述】:
我想知道如何重写这个类
public class ClassA {
private final String foo;
private final String bar;
public ClassA(String foo) {
this.foo = foo;
this.bar = foo.toUpperCase();
}
// getters...
}
作为记录类。
我能做到的最好的就是这个
public record ClassA(String foo, String bar) {
public ClassA(String foo) {
this(foo, foo.toUpperCase());
}
}
问题是这个解决方案创建了两个构造函数,而我只想要一个接受字符串 foo
-
public String bar() { return foo.toUpperCase(; }尽管没有缓存 toUpperCase,但它似乎是最不巴洛克的。 -
问题是你试图使用记录,就好像它们只是关于样板减少,而不是使用记录来做它们的用途(建模纯聚合(元组)),这就是为什么你有麻烦。您的
ClassA不是纯聚合;您希望拥有不属于聚合类模型的私有状态(本质上是缓存从记录组件派生的属性。)
标签: java constructor record java-17