java瀵硅薄鐨勬繁鎷疯礉鎬庝箞瀹炵幇
鍦↗ava涓紝鍙互閫氳繃浠ヤ笅鍑犵鏂瑰紡瀹炵幇瀵硅薄鐨勬繁鎷疯礉锛?/p>
- 浣跨敤Object.clone()鏂规硶锛歄bject绫绘彁渚涗簡涓€涓彈淇濇姢鐨刢lone()鏂规硶锛屽彲浠ョ敤浜庡垱寤哄璞$殑娴呮嫹璐濄€傚鏋滆瀹炵幇娣辨嫹璐濓紝闇€瑕佸湪瑕佽繘琛屾嫹璐濈殑瀵硅薄绫讳腑瀹炵幇Cloneable鎺ュ彛锛屽苟閲嶅啓clone()鏂规硶锛屽湪clone()鏂规硶涓垱寤烘柊鐨勫璞★紝骞跺皢鍘熷璞$殑灞炴€у€艰祴缁欐柊瀵硅薄鐨勫睘鎬с€?/li>
绀轰緥浠g爜锛?/p>
public class MyClass implements Cloneable {
private int id;
private String name;
// 鏋勯€犳柟娉?/span>
// getter鍜宻etter鏂规硶
@Override
protected Object clone() throws CloneNotSupportedException {
MyClass cloned = (MyClass) super.clone();
// 瀵逛簬寮曠敤绫诲瀷鐨勫睘鎬э紝闇€瑕佽繘琛屾繁鎷疯礉
cloned.name = this.name.clone();
return cloned;
}
}
- 瀹炵幇Serializable鎺ュ彛锛氬皢瀵硅薄搴忓垪鍖栦负瀛楄妭娴侊紝鐒跺悗鍐嶅皢瀛楄妭娴佸弽搴忓垪鍖栦负鏂扮殑瀵硅薄銆傝繖绉嶆柟娉曢渶瑕佺‘淇濆璞$殑鎵€鏈夋垚鍛樺彉閲忛兘鏄彲搴忓垪鍖栫殑銆?/li>
绀轰緥浠g爜锛?/p>
import java.io.*;
public class MyClass implements Serializable {
private int id;
private String name;
// 鏋勯€犳柟娉?/span>
// getter鍜宻etter鏂规硶
public MyClass deepCopy() throws IOException, ClassNotFoundException {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(this);
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bis);
return (MyClass) ois.readObject();
}
}
- 浣跨敤绗笁鏂瑰簱锛氬彲浠ヤ娇鐢ㄤ竴浜涚涓夋柟搴擄紝濡侫pache Commons鐨凷erializationUtils绫伙紝鏉ュ疄鐜板璞$殑娣辨嫹璐濄€?/li>
绀轰緥浠g爜锛?/p>
import org.apache.commons.lang3.SerializationUtils;
public class MyClass {
private int id;
private String name;
// 鏋勯€犳柟娉?/span>
// getter鍜宻etter鏂规硶
public MyClass deepCopy() {
return SerializationUtils.clone(this);
}
}
闇€瑕佹敞鎰忕殑鏄紝浠ヤ笂鏂规硶涓紝濡傛灉瀵硅薄鐨勬垚鍛樺彉閲忔槸涓嶅彲鍙樼被鍨嬶紙濡傚熀鏈暟鎹被鍨嬨€丼tring绛夛級锛屽垯涓嶉渶瑕佽繘琛屾繁鎷疯礉锛岀洿鎺ヨ祴鍊煎嵆鍙€傝€屽浜庡彲鍙樼被鍨嬶紙濡傛暟缁勩€侀泦鍚堛€佸叾浠栬嚜瀹氫箟绫荤瓑锛夛紝闇€瑕佽繘琛屾繁鎷疯礉锛屼互淇濊瘉鏂板璞′笌鍘熷璞$殑灞炴€у€间笉浼氱浉浜掑奖鍝嶃€?/p>