[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[jfriends] コピーコンストラクター
C++で言うコピーコンストラクターを書きたくて、こんなコードを書いていました。
public class ClassA {
private int id;
private String name = null;
ClassA() {}
ClassA(CassA instance_a) {
this.id = instance_a.id;
this.name = instance_a.name;
}
public int getID() { return id; }
public void setID(int Value) { id = Value; }
public String getName() { return name; }
public void setName(String Value) { name = Value; }
}
public class ClassB extends ClassA {
private String phone_number = null;
ClassB() {}
ClassB(ClassB instance_b) {
super(instance_b);
this.phone_number = instance_b.phone_number;
}
public String getPhoneNumber() { return phone_number; }
public void setPhoneNumber(String Value) { phone_number = Value; }
}
ところが、コピーコンストラクターは書かずに、
java.lang.Object にある clone() を呼べば良いのではないかということに今日気付きました。
ここで疑問は次の通りです。
1. clone() は、C++ で言うコピーコンストラクターを書かないで済ませるために
作られたものなのだろうか?
2.clone() は java.lang.Cloneable インターフェースを実装してる class だけに対して
使用可能だが、JDK 1.1 のヘルプで java.lang.Object のところを読むと、
java.lang.Object は Cloneable を実装していないようだがなぜか?
(ヘルプに書いてないだけ?)
3.自分でコピーコンストラクターを書かずに、Cloneable を実装して clone() を使う
危険性は?
4.clone() を使わずに、自分でコピーコンストラクターを書くメリットがあるか?
3は実験してみれば良いですね。clone() は OutOfMemoryError という例外を発生させる
ようですので、もしかしたら4にもメリットがあるのかも知れません。
皆さんはたぶん clone() をお使いだと思うのですが、
自前のコピーコンストラクターを書かれた方はおられますか?
---------------------------------------------------------------
遠藤靖之 (えんどう やすゆき)
E-mail: yasuyuki@xxxxxxxxxx
URL: http://members.aol.com/Eyasuyuki/ (Java互助会ホームページ)
〒171-0022 豊島区南池袋 2-14-10 瀬川池袋ビル 3F
(株)エムティシー 技術営業部
TEL 03-5396-0521 / FAX 03-5396-0525