我有一个像hirachy一样的课程:
class Main{
Main(Object input){ /* */}
}
class SubA extends Main{
SubA(Object input){
super(input);
// ...
}
}
class SubB extends Main{
SubB(Object input){
super(input);
// ...
}
}
我试图强调的是,Main
的构造函数已根据inputparameters构造了一个子类。类似的东西:
// Non working example
class Main{
Main(Object input){
if (input.fullfillsSomeCond()) { return new SubA(input); }
if (input.fullfillsSomeOtherCond()) { return new SubB(input); }
}
}
这显然不起作用,因为我会因递归而产生无限循环。有没有更好的架构女巫允许
Main somthing = new Main(myInput);
已构建正确的子类?
答案 0 :(得分:3)
使用构造函数执行此操作是不可能的,但您可以使用工厂方法:
class Main{
Main(Object input){}
public static Main create( Object input ) {
if (input.fullfillsSomeCond()) { return new SubA(input); }
if (input.fullfillsSomeOtherCond()) { return new SubB(input); }
// You might want to handle the case where input does not
// meet any of the above criteria.
throw new IllegalArgumentException("input must be either A or B!");
}
}
用法:
// Instead of new Main( input ):
Main oMain = Main.create(myInput);
除此之外,你可能想要Main
摘要及其CTOR protected
。
这里的缺点是Main
必须“知道”其子类和条件。但如果可以通过ctor完成,情况也是如此。