在Java中管理具有多个参数的构造函数

在我们的一些项目中,有一个类层次结构,它在链的下游添加了更多的参数。在底部,一些类最多可以有30个参数,其中28个参数刚刚被传递到超级构造函数中

我承认通过Guice之类的工具使用自动化的DI会很好,但是由于一些技术原因,这些特定的项目被限制在Java上

按类型按字母顺序组织参数的约定不起作用,因为如果对类型进行重构(您为参数2传递的圆圈现在是一个形状),它可能会突然无序

这个问题可能非常具体,充满了“如果这是你的问题,那么你在设计层面上做错了”的批评,但我只是在寻找任何观点

生成器设计模式可能会有所帮助。考虑下面的例子

公共类StudentBuilder
{
私有字符串\u名称;
private int _age=14;//这是一个默认值
私有字符串_monit=“”;//大多数学生没有
public StudentBuilder(){}
公立学生(学生)
{
返回新学生(姓名、年龄、座右铭);
}
public StudentBuilder名称(字符串_名称)
{
这个。_name=_name;
归还这个;
}
公共学生建筑年龄(国际年龄)
{
这个。_年龄=_年龄;
归还这个;
}
公立学生校训(字符串校训)
{
这是我的座右铭;
归还这个;
}
}

这让我们可以像这样编写代码

Student s1=new StudentBuilder().name(“Eli”).buildStudent();
学生s2=新学生生成器()
.名称(“Spicoli”)
.年龄(16岁)
.座右铭(“你好,汉德先生”)
.buildStudent();

如果我们省略了一个必填字段(可能名称是必填的),那么我们可以让学生构造函数抛出一个异常。
它允许我们拥有默认/可选参数,而无需跟踪任何类型的参数顺序,因为这些调用的任何顺序都同样有效

发表评论