我有一個類hirachy,如:Java的構造,使已經是正確的子類
class Main{
Main(Object input){ /* */}
}
class SubA extends Main{
SubA(Object input){
super(input);
// ...
}
}
class SubB extends Main{
SubB(Object input){
super(input);
// ...
}
}
什麼我試圖impement是,的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);
已經構建了正確的子類嗎?
我認爲,根據超類中指定的條件,不允許超類生成子類類型。也許看工廠模式 - 它是一個衆所周知的模式,用於從一組可能性中創建特定的實現(包括子類):[工廠模式](https://en.wikipedia.org/wiki/Factory_method_pattern) –
無法在構造函數中返回任何內容。看看[工廠模式](https://www.tutorialspoint.com/design_pattern/factory_pattern.htm)。含義:不要使用構造函數,而要使用工廠的方法。 – f1sh
至少,你正試圖從構造函數返回一個值!這在java中是不可能的 –