如何在具有多个字段的java中创建不可变的类?

时间:2019-06-14 12:42:11

标签: java immutability

我有一个面试问题,面试官问我:“如何在Java中创建一个不可变的类,哪个类中将包含100多个字段?”

我们知道要创建不可变的类,我们需要将一个类声明为final,需要将所有字段声明为final,并且该类中不应存在任何setter方法。我们需要在构造函数中初始化这些字段。

但是,如果我们有10个以上的字段或更多的字段,将会发生什么?我们不能在构造函数中传递所有字段吗?在这种情况下,我们如何创建不可变的类?

1 个答案:

答案 0 :(得分:2)

这里的字段计数是无关紧要的,即使一个类中有多个字段是可怕的设计,也表明应该重构该类。要使一个类不可变,您需要以下内容:

  1. 没有设置方法。这意味着您要么想要一个Builder内部类来在调用构造函数之前设置字段的值,要么干脆将所有字段都包含为构造函数参数(强烈建议您反对)。
  2. 将该类声明为final。这样可以防止类扩展和调用super
  3. 如果您的不可变类中包含非原始字段,则需要对其进行复制,并在每次对其进行更改时返回副本。

顺便说一句,据我所知,Java构造函数可以处理255 parameters。因此,对于本次采访,可以选择构造函数参数