1. 程式人生 > >JAVA複製物件給另一個物件

JAVA複製物件給另一個物件

               

今天算是遇到一個問題了。相當苦惱。

需求如下:有2個相同id的物件,但它們的值不同。其中一個物件要用到另一個物件的屬性值。

由於在hibernate的sessionFactory().getSession中不能存在2個相同id的物件。故此,想出複製物件。

找了很多地方,發現有2種方法可以達到複製物件的目的,只是最後這種方法還是沒有解決我的問題。僅此記下來吧。

1,克隆clone

java支援克隆一個物件的值到另一個物件,簡單的克隆和深度克隆,深度克隆可能包括繼承,巢狀,沒有用到,所以也就沒怎麼去研究它。

首先,克隆的物件需要實現 Cloneable介面,重寫其中的clone()方法,為了使clone()方法在外部可用,需要將重寫的方法訪問修飾符改成public級別。

@Override public Object clone() throws CloneNotSupportedException {  return super.clone(); }
dv=(Deliverymanreport)deliverymanreport.clone();//克隆物件
dv是deliverymanreport克隆的一個物件。它擁用克隆後的屬性和方法。

2,序列化和反序列化Serializable

序列化的物件要實現Serializable接口才能實現序列化。

序列化後,通過反序列化可以得到和當前物件一樣的物件。它比克隆來得更準備。但也就不一定最好,如果這個物件在之前被修改,序列化後可能就會出問題了。

ByteArrayOutputStream byteOut = new ByteArrayOutputStream();ObjectOutputStream out= new ObjectOutputStream(byteOut);out.writeObject(deliverymanreport);//寫物件,序列化ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray());  dv=(Deliverymanreport)in.readObject(); //讀物件,反序列化
序列化經常用於檔案傳遞的讀取。尤其是在快取中用得比較多,通過序列化可以將物件快取在硬碟中。這在登入系統快取使用者許可權和角色等資訊最常見。而用對克隆物件,也不失為一種很好的方法。