当前位置:编程学习 > JAVA >>

克隆对象

假设在你的应用中使用一些对象,你如何拷贝你的对象呢?最明显的方法是讲一个对象简单的赋值给另一个,就像这样:

    obj2 = obj1;

但是这个方法实际上没有拷贝对象而仅仅是拷贝了一个对象引用,换换言之,在你执行这个操作后仍然只有一个对象,但是多出了一个对该对象的引用。

如果这个看似明显的方法不能正常工作,那么如何实际的拷贝一个对象呢?为什么不试试Object.clone呢?这个方法对Object的所有子类都是可用的。例如:
  1.     class A {
  2.         private int x;
  3.         public A(int i) {
  4.             x = i;
  5.         }
  6.     }
  7.     
  8.     public class CloneDemo1 {
  9.         public static void main(String args[])
  10.           throws CloneNotSupportedException {
  11.             A obj1 = new A(37);
  12.             A obj2 = (A)obj1.clone();
  13.         }
  14.     }

这个代码引发一个编译错误,因为Object.clone是一个protected方法。那么再试一次,换一种方法:
  1.     class A {
  2.         private int x;
  3.         public A(int i) {
  4.             x = i;
  5.         }
  6.         public Object clone() {
  7.             try {
  8.                 return super.clone();
  9.             }
  10.             catch (CloneNotSupportedException e) {
  11.                 throw new InternalError(e.toString());
  12.             }
  13.         }
  14.     }
  15.     
  16.     public class CloneDemo2 {
  17.         public static void main(String args[])
  18.           throws CloneNotSupportedException {
  19.             A obj1 = new A(37);
  20.             A obj2 = (A)obj1.clone();
  21.         }
  22.     }
    
在这个方法中,呢定义自己的clone方法,它扩展Object.clone方法,CloneDemo2可以编译,但是当你运行它时会抛出一个CloneNotSupportedException异常。

这里仍然缺少一些东西,你必须让那些包含clone方法的类实现Cloneable接口,就像这样:
  1.     class A implements Cloneable {
  2.         private int x;
  3.         public A(int i) {
  4.             x = i;
  5.         }
  6.         public Object clone() {
  7.             try {
  8.                 return super.clone();
  9.             }
  10.             catch (CloneNotSupportedException e) {
  11.                 throw new InternalError(e.toString());
  12.             }
  13.         }
  14.         public<
补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,