用代码比用单词更容易理解这个问题:
Map<Integer, Parent> objectMap = new HashMap<Integer, Parent>();
Parent myParent;
Child1 myChild1;
Child2 myChild2;
//A lot more myChilds
objectMap.put(1, myChild1);
objectMap.put(2, myChild2);
//Place all the myChilds
myChild1 = new Child1(); //Constructor is expensive, object may not get used
myChild2 = new Child2(); //Constructor is expensive, object may not get used
//Call constructor for all of myChilds
Parent finalObject;
int number = 1; //This can be any number
finalObject = objectMap.get(number);
如您所见,我事先不知道finalObject是哪个类。该代码可以正常工作,但这是我的问题:
如何避免同时调用两个构造函数?
由于将仅使用myChild1或myChild2并且构造方法非常昂贵,因此我只想调用将实际使用的方法。
就像是
finalObject.callConstructor();
在最后一行
有任何想法吗?
提前致谢。
编辑:我想知道的是如何在不知道类名称的情况下调用构造函数。检查更新的代码。
最佳答案
这个怎么样?
Parent finalObject;
if (condition) {
finalObject = new Child1();
} else {
finalObject = new Child2();
}
或者,甚至更好?
Parent finalObject = condition? new Child1() : new Child2();