遇到一个问题
一个函数
Object change(Object obj){}
调用函数传入对象obj
在函数里可能对这个对象要进行改变,
如果改变要将改变之后的对象返回
如果不改变就将对象原样返回所以 这样在函数里就涉及到一个对象深度复制的问题
应该怎么办呀?
这个对象中成员变量不仅是基本的数据类型,
还包括对象,
应该怎以办呢?

解决方案 »

  1.   

    实现Cloneable接口
    public class test implements Cloneable
    {
    ....
    public Ojbect clone()
    {
      Object tmpObj=super.clone();//这里要做异常处理,否则编译不过;
      return (test)tmpObj;
    }
    }
      

  2.   

    好像不行吧,
    这个clone()方法也只能复制基本数据类型
    如果有类的成员变量的话
    clone()方法也只是复制一个引用吧,
    外面改了,那备份的这个对象也改了呀
      

  3.   

    这里Test类是要被clone的,必须应用serializable,CloneObject是clone工具类:import java.io.ByteArrayOutputStream;
    import java.io.ByteArrayInputStream;
    import java.io.ObjectOutputStream;
    import java.io.ObjectInputStream;
    public class CloneObject {
        public CloneObject() {
        }
        public Object clone(Object obj) {
            try {
                ByteArrayOutputStream bout = new
                    ByteArrayOutputStream();
                ObjectOutputStream out
                    = new ObjectOutputStream(bout);
                out.writeObject(obj);
                out.close();            ByteArrayInputStream bin = new
                    ByteArrayInputStream(bout.toByteArray());
                ObjectInputStream in = new ObjectInputStream(bin);
                Object newObj = in.readObject();
                in.close();            return newObj;
            } catch(Exception e) {
                e.printStackTrace();
                return null;
            }    }
    }public class Test extends java.lang.Object implements java.io.Serializable
    {
      public int a = 0;
      public String aa="";
      //public Test test = new Test(55,"121");
      public Test(int aaa,String str) 
      {
        a=aaa;
        aa =str;
      }
      public static void main(String[] args)
      {
        Test test = new Test(1,"1");
        CloneObject cobj = new CloneObject();
        Test test1 =(Test) cobj.clone(test);
        test.a = 20;
        test.aa = "20";
        System.out.println("Test1的值:"+test1.a+"/"+test1.aa);
        System.out.println("Test的值:"+test.a+"/"+test.aa);
      }
    }
      

  4.   

    所谓的对象 不就是基本数据组成的?
    只要你把所有的相关对象都实现cloneable  那不就能深拷贝了??