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

Map<Integer, Parent> objectMap = new HashMap<Integer, Parent>();

Parent myParent;
Child1 myChild1;
Child2 myChild2;
//A lot more 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

objectMap.put(1, myChild1);
objectMap.put(2, myChild2);
//Place all the myChilds in the objectMap


Parent finalObject;

int number = 1; //This can be any number

finalObject = objectMap.get(number);


如您所见,我事先不知道finalObject将是哪个类。该代码可以正常工作,但这是我的问题:

如何避免调用所有构造函数?

由于将仅使用myChild1或myChild2并且构造方法非常昂贵,因此我只想调用将实际使用的方法。

就像是

finalObject.callConstructor();


在最后一行

有任何想法吗?

提前致谢。

最佳答案

.class存储在地图中,然后在需要时使用Class.newInstance()

final Map<Integer, Class<? extends Parent>> objectMap = new HashMap<>();
objectMap.put(1, Child1.class);
objectMap.put(2, Child2.class)
// ...

// then later
final Parent aChild1 = objectMap.get(1).newInstance()

09-30 15:37