Java中构造函数中的长参数列表

Java中构造函数中的长参数列表,java,refactoring,coding-style,Java,Refactoring,Coding Style,可能重复: 如果构造函数有长的参数列表,我们应该考虑它坏的样式并重构它吗?如果是,如何使用?考虑使用生成器。与其使用构造函数,其中某些参数可以为null: Foo foo = new Foo(name, id, description, path, bar); 而不是压缩构造函数-即为每个参数组合生成一个构造函数,您可以: Foo foo = new FooBuilder().setName(name).setPath(path).build(); 是的,你应该。请参见这可能是一组合适的参

可能重复:


如果构造函数有长的参数列表,我们应该考虑它坏的样式并重构它吗?如果是,如何使用?

考虑使用
生成器。与其使用构造函数,其中某些参数可以为
null

Foo foo = new Foo(name, id, description, path, bar);
而不是压缩构造函数-即为每个参数组合生成一个构造函数,您可以:

Foo foo = new FooBuilder().setName(name).setPath(path).build();

是的,你应该。请参见

这可能是一组合适的参数,但很多时候我的答案都是肯定的。如果存在,将参数分解为逻辑子组,即,不要从许多不同的零件创建汽车,而是将一些零件分组为发动机对象,将一些零件分组为底盘等

或者,如果其中一些参数是可选的,请使用生成器模式,以便仅在必要时包含它们


不过,最终还是要做对你和你的领域最有意义的事情。

有时候。您可能会试图将一些参数分组到“上下文”中,但这违反了Demeter定律。也许不是参数列表,但是类是错误的,因为它做的太多了。为什么?对我来说,这似乎是一个答案。