我有一个面试问题,面试官问我,“你将如何在 java 中创建一个不可变类,哪个类将包含 100 多个字段?”
正如我们所知,要创建不可变类,我们需要将类声明为 final,需要将所有字段声明为 final,并且该类中不应存在任何 setter 方法。我们需要在构造函数中初始化这些字段。
但是当我们有超过10个字段或更多字段时会发生什么?我们不能传递构造函数中的所有字段吗?在这种情况下,我们如何创建不可变类?
最佳答案
这里的字段数是无关紧要的,即使在一个类中有多个字段是糟糕的设计并且是应该重构类的标志。要使类不可变,您需要具备以下条件:
- 没有设置方法。这意味着您要么需要一个
Builder
内部类来在调用构造函数之前设置字段的值,要么只是将所有字段作为构造函数参数包含在内(强烈建议不要这样做)。 - 将类声明为
final
。这可以防止类扩展和调用super
。 - 如果您的不可变类中有非原始字段,您需要复制它们并在每次更改它们时返回副本。
顺便说一句,据我所知,Java 构造函数可以处理 255 parameters .所以对于这次采访,构造函数参数将是一个选项。
关于java - 如何在具有许多字段的java中创建一个不可变的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56598456/