Java:调用类的构造函数

Java:调用类的构造函数,java,class,arraylist,constructor,Java,Class,Arraylist,Constructor,我有一个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()); } 我怎样才能做到这一点?代码的最后一行

我有一个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的实例。不同的列表项都有一个共同的父项,事实上,列表上的项甚至可以都是相同的,但我无法将类名硬编码到程序中

编辑: 我可能把这个例子说得太过分了

我基本上有一个类来处理ArrayList,并且需要添加已经在其中的对象的新实例,但是列表中可能有不同的类类型

编辑: 根据每个人的回答,这显然是解决问题的错误方法! 我想我会尝试一种克隆方法来克隆灯光中的对象,但我也会寻找一种完全不同的方法。 谢谢你的帮助

这很管用:

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

}

我不是说你应该使用它。

为什么,哦,为什么你首先要使用原始ArrayList?将返回的对象强制转换为适当的类型。这听起来像一个(请参阅链接)。你能提供一些背景资料说明为什么你认为你需要这样做吗?我强烈怀疑有一种更好的方法来解决整个问题(而不是特定的代码问题)。考虑将<代码> ARAYLIST列表更改为更具体的代码,如“代码>列表列表= NealRayListLe()/代码>。这段代码编译得很好,除非你没有arg构造函数。是的,因为很难找到这个问题的答案,我的方法可能是错误的。基本上,我有一个类可以操作ArrayList,并且需要添加已经在其中的对象的新实例,但是列表中可能有不同的类类型。在这种情况下,它也可以工作(如果您也执行
list.add(new Y())
,等等)。但是您必须注意使用正确的参数调用正确的构造函数。