用代码比用单词更容易理解这个问题:
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()