java构造函数,使已经正确的子类

时间:2017-02-13 15:20:32

标签: java object constructor architecture

我有一个像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);已构建正确的子类?

1 个答案:

答案 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完成,情况也是如此。