要初始化一个实例,我们可以使用默认构造函数和许多 setter,或者使用带有长参数列表的构造函数。后一种方式在对象生成后对象状态可能保持不变(因为没有setter),但是长参数列表是丑陋且容易出错的。前一种方式避免了冗长的参数列表,但是在对象完全创建后,setter可能会错误地更改对象状态。
我需要这样一个对象,它的内部字段在对象创建后应该保持不变,而我不喜欢长参数列表。最好的做法是什么?
要初始化一个实例,我们可以使用默认构造函数和许多 setter,或者使用带有长参数列表的构造函数。后一种方式在对象生成后对象状态可能保持不变(因为没有setter),但是长参数列表是丑陋且容易出错的。前一种方式避免了冗长的参数列表,但是在对象完全创建后,setter可能会错误地更改对象状态。
我需要这样一个对象,它的内部字段在对象创建后应该保持不变,而我不喜欢长参数列表。最好的做法是什么?
使用建造者模式:
Foo foo = new FooBuilder().setBar(...).setBaz(...).build();
一个长的参数列表可能(但不是必须)意味着该类应该被重构为更小的类。