在Java中實現對象克隆的方法有以下幾種:
實現Cloneable接口,并重寫clone方法。
public class MyClass implements Cloneable {
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
使用Object類的clone方法,并在類中調用super.clone()方法。
public class MyClass {
@Override
protected Object clone() throws CloneNotSupportedException {
return 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;
}
}
}
需要注意的是,如果要實現深拷貝(即克隆對象和原對象不共享引用),需要在clone方法中對引用類型的成員變量進行克隆操作。