我有一个面试问题,面试官问我:“如何在Java中创建一个不可变的类,哪个类中将包含100多个字段?”
我们知道要创建不可变的类,我们需要将一个类声明为final,需要将所有字段声明为final,并且该类中不应存在任何setter方法。我们需要在构造函数中初始化这些字段。
但是,如果我们有10个以上的字段或更多的字段,将会发生什么?我们不能在构造函数中传递所有字段吗?在这种情况下,我们如何创建不可变的类?
答案 0 :(得分:2)
这里的字段计数是无关紧要的,即使一个类中有多个字段是可怕的设计,也表明应该重构该类。要使一个类不可变,您需要以下内容:
Builder
内部类来在调用构造函数之前设置字段的值,要么干脆将所有字段都包含为构造函数参数(强烈建议您反对)。final
。这样可以防止类扩展和调用super
。顺便说一句,据我所知,Java构造函数可以处理255 parameters。因此,对于本次采访,可以选择构造函数参数 。