在此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换句话说?使不可变字段
最终
?可以这样做。事实上,为什么只有不可变的字段。为什么不是每个领域,除了地位。这就是我的意思,是的。