d的构造器库
A a = new A();
a.setName("Bob");
a.setAge(20);
a.isProbation(false);
a.isActive(true);
...
这样构造太冗余.
A a = new A("Bob", 20, false, true);
而如上多参构造无标记,易搞混顺序,或含义不清楚
本库,允许这样:
class A {
string name;
int age;
bool isProbation;
bool isActive;
mixin AddBuilder!(typeof(this));
}
A a = A.builder()
.name("Bob")
.age(20)
.isProbation(false)
.isActive(true)
.build();
此工具允许单式构造,及清楚标记参数,还可完全不必写构造器.
如何扩展builder方法呢?
是自动生成构建器方法的,并在类中沿继承链上移,来取所有字段(假定你说的"扩展"指的是继承?)
下面是其中一个单元测试:
class A2 {
int a;
string b;
}
class B2 : A2 {
int c;
mixin AddBuilder!(typeof(this));
}
//应该可从`生成器`取得,所有继承`字段`
unittest {
B2 b2 = B2.builder()
.a(3)
.b("ham")
.c(4)
.build();
assert(b2.a == 3);
assert(b2.b == "ham");
assert(b2.c == 4);
}
浙公网安备 33010602011771号