我有这个代码:
我要复制的课程:
public class NormalChair extends AbstractChair {
protected int height;
protected String name;
public NormalChair() {
super();
}
public NormalChair(String name, int height) {
super(name, height);
}
// Copy constructor - getName() and getHeight() are defined in parent class.
public NormalChair(NormalChair chair) {
this(chair.getName(), chair.getHeight());
}
}
创建一些类
public Object createObj(String cls_name, String param1, int param2){ return Class.forName(cls_name).getConstructor(String.class, Integer.class).newInstance(param1, param2); }
然后我尝试使用以下方法复制该类的对象:
Object obj_to_copy = createObj("Classname", "name", 10);
String cls_name = obj_to_copy.getClass().getName();
Class.forName(cls_name).getConstructor(Object.class).newInstance(obj_to_copy);
我得到这个错误:
Exception in thread "main" java.lang.NoSuchMethodException: test.NormalChair.<init>(java.lang.Object)
at java.lang.Class.getConstructor0(Class.java:2800)
at java.lang.Class.getConstructor(Class.java:1708)
at test.ProductTrader.create(ProductTrader.java:57)
at test.Test.main(Test.java:23)
所以我想我需要以某种不同的方式调用复制构造函数而不是将其类型显示为对象?
PS我也把这个例子简单化了。但实际上我不知道在运行前需要复制哪个类,所以使用复制构造函数不应该只依赖于NormalChair class.
更新:
我更新了我的问题,以更清楚地说明当我在运行时之前复制对象时,我不知道它需要复制什么类。