在我们的一些项目中,有一个类层次结构,随着它沿着链向下添加更多参数。在底部,一些类最多可以有 30 个参数,其中 28 个只是传递给超级构造函数。
我承认通过 Guice 之类的工具使用自动化 DI 会很好,但由于某些技术原因,这些特定项目仅限于 Java。
按类型按字母顺序组织参数的约定不起作用,因为如果重构类型(您为参数 2 传入的 Circle 现在是 Shape),它可能会突然出现故障。
这个问题可能是具体的并且充满了“如果这是你的问题,那么你在设计层面做错了”的批评,但我只是在寻找任何观点。
考虑以下示例
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();
如果我们省略了一个必填字段(可能是 name 是必需的),那么我们可以让 Student 构造函数抛出异常。它让我们拥有默认/可选参数,而无需跟踪任何类型的参数顺序,因为这些调用的任何顺序都同样有效。