從你的問題我猜你需要深拷貝的對象。如果是這種情況,請不要使用clone
方法,因爲它已經在oracle docs
中指定它提供淺拷貝的關聯對象。我對BeanUtils.copyProperties
API沒有足夠的瞭解。
以下是deep copy
的簡短演示。在這裏我深刻地複製了primitive array
。您可以使用任何類型的對象來嘗試此代碼。
import java.io.*;
class ArrayDeepCopy
{
ByteArrayOutputStream baos;
ByteArrayInputStream bins;
public void saveState(Object obj)throws Exception //saving the stream of bytes of object to `ObjectOutputStream`.
{
baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(obj);
oos.close();
}
public int[][] readState()throws Exception //reading the state back to object using `ObjectInputStream`
{
bins = new ByteArrayInputStream(baos.toByteArray());
ObjectInputStream oins = new ObjectInputStream(bins);
Object obj = oins.readObject();
oins.close();
return (int[][])obj;
}
public static void main(String[] args) throws Exception
{
int arr[][]= {
{1,2,3},
{4,5,7}
};
ArrayDeepCopy ars = new ArrayDeepCopy();
System.out.println("Saving state...");
ars.saveState(arr);
System.out.println("State saved..");
System.out.println("Retrieving state..");
int j[][] = ars.readState();
System.out.println("State retrieved..And the retrieved array is:");
for (int i =0 ; i < j.length ; i++)
{
for (int k = 0 ; k < j[i].length ; k++)
{
System.out.print(j[i][k]+"\t");
}
System.out.print("\n");
}
}
}
那你到底在問什麼? – 2013-03-21 08:29:16
我們應該使用clone還是BeanUtils.copyProperties,爲什麼 – Biscuit128 2013-03-21 08:32:09