`

Clone --浅、深

 
阅读更多
所谓浅克隆即是只将相应成员变量进行拷贝,如果含有复杂类型的成员则不进行进一步的复制,而只是将其引用进行复制。
深克隆就是复制到底~~

要实现深克隆有两种方法:
一种是将相应的类都实现克隆接口,在包含复杂类型成员的克隆方法中调用相应的成员的克隆方法。如
public class A implements Cloneable,Serializable
{
private static final long serialVersionUID = -2051342021933626021L;
  B b;

 public A(B b)
 {
   this.b=b;
 }

 public Object clone()
 {
    A obj=null;
    try
    {
       obj=(A)super.clone();
       obj.b=(B)b.clone();
    }
    catch (CloneNotSupportedException e) 
     {
	e.printStackTrace();
	}
   return obj;
 }
}

public class B implements Cloneable,Serializable
{
 private static final long serialVersionUID = -5189809844536624029L;
  public Object clone()
 {
    B obj=null;
    try
    {
       obj=(B)super.clone();
    }
     catch (CloneNotSupportedException e) 
     {
	e.printStackTrace();
	}
   return obj;
 }
}


第二种方法是通过将对象序列化与反序列化来实现复制
A a1=new A1(new B());
ByteArrayOutputStream in=new ByteArrayOutputStream();
ObjectOutputStream inStream=new ObjectOutputStream(in);
inStream.writeObject(a1);
		
		
ByteArrayInputStream out=new ByteArrayInputStream(in.toByteArray());
ObjectInputStream outStream=new ObjectInputStream(out);
A a2=(A)outStream.readObject();

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics