用代码比用单词更容易理解这个问题:

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();

09-27 12:34