1.用ObjectInputStream  ObjectOutputStream2.实现clone()方法这些东西怎么用,对你来说查查资料不难吧。

解决方案 »

  1.   

    要使clone()方法的话不要忘了重载啊,否则还是一样的。
      

  2.   

    clone()方法是Object类的protected方法,无法直接调用。我的问题都是经过思考、调查和研究之后才提出来的,希望某些大虾能验证之后再回复,以免浪费页面。relive,你所说的重载是指让谁冲在clone()方法呢?我现在是希望得到传来参数的副本,不是希望自己的类能够被clone(),不知道是否可以通过重载实现?
      

  3.   

    class obj extends Object
    你试过吗?
      

  4.   

    obj只是一个函数的参数,而不是一个类。我为什么要
    class obj extends Object
    呢?
      

  5.   

    在你的obj里覆盖并且声明为public其实说clone()方法,也不过是java定出来的规范,你完全可以提供一个getObjClone()方法,在这里new一个新的实例,把现有属性赋给它,效果还不是和clone()一样的,所谓clone也不过是完成这样的任务,开一个新的内存区,把现有的状态赋给它。用clone()比较规范,而且考虑到深度复制,自己实现很麻烦。
      

  6.   

    问题在于我的这个函数希望接受通用的类的对象。也就是不论你是什么类的对象都可以作为我的参数,所以才使用Object类型作为参数的类型。无论我如何精美的编制obj,他也不过是Object的一个对象,也就是一个参数,根本就不是类。除非允许我重新写一个新的类,并且所有Java的类都从我的类这里继承,否则上面所说的方法都是无法成功的。
      

  7.   

    楼上说得很对!在实现clole()时,有时候要考虑深度复制(比如一个ArrayList,你要得到它的一个副本,你调用clone()只是复制这个ArrayList本身而已,不包括它里面的对象,如果你同时又要复制这个ArrayList里面包含的对象,这时你的close()方法的复杂度就会大大增加。)
    如果时一般的clone(),想要实现只要将你的类实现cloneable接口,再重载object的clone()方法为public就可以了。
    如:
    class MyObject implements Cloneable
    {
      int i;
      MyObject(int ii)
     { 
        i = ii;
     }
      public Object clone()//clone()方法必须是public的
     {
        Object o = null;
        try
       {
          o = super.clone();//这句代码时必须的
        }
        catch(CloneNotSupportedException e)
       {
          System.err.println("MyObject can't clone");
        }
        return o;
      }
    }
      

  8.   

    问题在于我的这个函数希望接受通用的类的对象。也就是不论你是什么类的对象都可以作为我的参数,所以才使用Object类型作为参数的类型。这不要紧啊,只要你的实际参数是可clone的就没有问题的。java里面不用virtual就实现动态联编的。他一样会调用你子类的方法的。
      

  9.   

    编写好的clone方法是比较复杂的,可以参考Effective Java一书
      

  10.   

    java规定要使对象具有clone能力必须显式的定义它的clone能力,所以如果你的func方法传入的参数是Object类型则不能clone
    你可以这么做:
    public class CloneTest {
    Object data;
    public void func(Object obj) {
    if (obj instanceof MyObject) {
    data = ((MyObject) obj).clone();
    } else {
    data = obj;
    }
    }
    }
    class MyObject implements Cloneable {
    public Object clone() {
    try {
    return super.clone();
    } catch (CloneNotSupportedException e) {
    return null;
    }
    }
    }
      

  11.   

    对象的复制涉及很多问题,楼主可以去翻阅think in java,有很大一部分章节介绍这个内容
      

  12.   

    when we develop our projects, we have almost all classes extends the top root class, DObject.
    DObject extends Object by default which does not need to be specified.
    DObject then implements Serializable and Cloneable. So, the clone() method is implemented in our DObject class.
    We implemented it using java reflect package, so there's no need to write own clone() for any other Classes extending DObject. And, they are all able to clone.
    DObject has a control in order not to hit an infinite loop. The simplest solution is to give a depth control. That's exactly how we coded in our 1.0 version. In our 2.0 version, we've used a pool to indicate whether we have cloned the Object or not. The full clone is satisfied.