私はこのコードを持っています:
コピーしたいクラス:
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.
アップデート:
質問を更新して、ランタイムの前にオブジェクトをコピーするときに、コピーする必要があるクラスがわからないことをより明確にしました。