Javaでオブジェクトのクローンを実現する方法は何ですか?
Javaでオブジェクトのクローンを実装する方法には次のようなものがあります:
- Cloneable インターフェースを実装し、clone メソッドをオーバーライドしてください。
- MyClassクラスはCloneableを実装しており、clone()メソッドをオーバーライドしています。このメソッドでは、スーパークラスのclone()メソッドを呼び出しています。
- Objectクラスのcloneメソッドを使用し、クラス内でsuper.clone()メソッドを呼び出す。
- MyClassというクラスにおいて、cloneメソッドをOverrideして、CloneNotSupportedExceptionをスローする場合、super.clone()を返すようにしました。
- オブジェクトのクローンを実装するために、シリアライズとデシリアライズを使用します。
- public class MyClass implements Serializable {
public MyClass clone() {
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(this);
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bais);
return (MyClass) ois.readObject();
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
return null;
}
}
}
を持つMyClassクラス
深いコピー(つまり、オブジェクトと元のオブジェクトが参照を共有しない)を実現したい場合は、cloneメソッド内で参照型のメンバー変数をクローンする必要があります。