在此java上下文中使用不可变或可变对象?
我有一个类在此java上下文中使用不可变或可变对象?,java,immutability,mutable,Java,Immutability,Mutable,我有一个类帐户,其中有许多字段,对象中只有字段状态(活动或非活动)可以更改。 因此,我们讨论的是一个包含10个字段的类,其中只有字段status,这对于设置程序来说是有意义的 在这种情况下,您会怎么做?除了改变状态的特定字段之外,您会使整个类不可变吗?帐户不必不可变,但其作为字段的组合类(如果有的话)是不可变的。 另外,只有状态将有setter方法 类似于下面的内容- class Account { private int a; private String b; pri
帐户
,其中有许多字段,对象中只有字段状态
(活动或非活动)可以更改。
因此,我们讨论的是一个包含10个字段的类,其中只有字段status
,这对于设置程序来说是有意义的
在这种情况下,您会怎么做?除了改变状态的特定字段之外,您会使整个类不可变吗?
帐户不必不可变,但其作为字段的组合类(如果有的话)是不可变的。
另外,只有状态
将有setter方法
类似于下面的内容-
class Account {
private int a;
private String b;
private SomeClass s; //Make this immutable
private String status;
String setStatus(String status) {
this.status = status;
}
}
不存在部分不可变的类;如果任何字段都是可修改的,则该类是可变的。我看不出添加你不需要的突变子的目的,但你真正的问题是什么?问题中没有足够的细节,任何人都无法对情况提供有用的分析。但即使只有一个可变字段的对象也不是不可变的对象。@Elliot Frisch指出,帐户的状态可能会更改,如开始日期、名称、姓氏等。。永远不会改变。由于我有数十亿个帐户,每次为每个帐户的状态从活动变为非活动时都创建一个新对象,这将是非常昂贵的。请将状态排除在不可变范围之外,并使用不可变对象作为状态的键?@ThomasChristensen换句话说?使不可变字段最终
?可以这样做。事实上,为什么只有不可变的字段。为什么不是每个领域,除了地位。这就是我的意思,是的。