具有长参数列表或多个二传手的构造器?

cha*_*nce 0 java constructor long-parameter-list

要初始化实例,我们可以使用默认的构造函数和一些setter,也可以使用带有长参数列表的构造函数.在后一种方式中,对象状态可以在生成对象之后保持不变(因为没有setter),但是长参数列表是丑陋且容易出错的.在前一种方式中,长参数列表是避免的,但是在完全创建对象之后,设置者可能会错误地改变对象状态.

我需要这样一个对象,它的内部字段应该在创建对象后保持不变,而我不喜欢长参数列表.这样做的最佳做法是什么?

axt*_*avt 9

使用Builder模式:

Foo foo = new FooBuilder().setBar(...).setBaz(...).build();
Run Code Online (Sandbox Code Playgroud)

  • 在考虑构建器模式时,还要考虑参数是否确实是单个值,或者可能是属性组的一部分,可以将其提升为类.因此,您可以使用具有较少参数的另一个签名替换此构造函数签名,但每个参数代表更高级别的抽象.可能不是这种情况,在这种情况下,Builder模式很棒,但您至少应该考虑它. (3认同)