我有一个ArrayList,它包含可能不同类的对象,需要调用类构造函数。
ArrayList list = new ArrayList();
list.add(new Child1());
list.add(new Child2());
public void Spawn(){
Class clazz = list.get(0).getClass();
list.add(clazz.getConstructor().newInstance());
}
我怎样才能做到这一点?代码中的最后一行返回错误,因为clazz.getConstructor().newInstance()
返回一个对象,而不是child1的实例。不同的列表项都有一个共同的父项,实际上列表中的项甚至可以都是相同的,但我不能将类名硬编码到程序中。
编辑: 我可能已经把这个例子搞得太过分了。
我基本上有一个操作ArrayLists的类,需要添加已经在里面的对象的新实例,但是列表里面可能有不同的类类型。
编辑: 基于每个人的回答,这显然是解决问题的错误方法! 我想我会为点亮的对象尝试一种克隆方法,但我也会完全寻找一种不同的方法。 谢谢您的帮助。
答案 0 :(得分:1)
这很好用:
public static void arraylist() throws Exception {
ArrayList list = new ArrayList();
list.add(new X());
Class clazz = list.get(0).getClass();
list.add(clazz.getConstructors()[0].newInstance());
}
我不是说你应该用它..