用Java管理带有许多参数的构造函数

在我们的某些项目中,有一个类层次结构,它随着链的向下添加更多的参数。在底部,某些类最多可以具有30个参数,其中28个正被传递给超级构造函数。


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


按类型按字母顺序组织参数的约定无效,因为如果重构类型(您为参数2传入的Circle现在是Shape),它可能会突然混乱。


这个问题可能是针对特定问题的,并且充满了“如果这是您的问题,那么您在设计级别上做错了”的批评,但是我只是在寻找任何观点。


噜噜哒
浏览 403回答 3
3回答

慕哥9229398

生成器设计模式可能会有所帮助。考虑以下示例public class StudentBuilder{    private String _name;    private int _age = 14;      // this has a default    private String _motto = ""; // most students don't have one    public StudentBuilder() { }    public Student buildStudent()    {        return new Student(_name, _age, _motto);    }    public StudentBuilder name(String _name)    {        this._name = _name;        return this;    }    public StudentBuilder age(int _age)    {        this._age = _age;        return this;    }    public StudentBuilder motto(String _motto)    {        this._motto = _motto;        return this;    }}这让我们编写如下代码Student s1 = new StudentBuilder().name("Eli").buildStudent();Student s2 = new StudentBuilder()                 .name("Spicoli")                 .age(16)                 .motto("Aloha, Mr Hand")                 .buildStudent();如果我们忽略了必填字段(可能是必填名称),则可以让Student构造函数引发异常。而且它使我们可以使用默认/可选参数,而无需跟踪任何类型的参数顺序,因为这些调用的任何顺序都可以很好地工作。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java