我自己写了一个类,想实现clone接口,不知道方法体怎么写!请高手指点。

解决方案 »

  1.   

    克隆: 新对象的所有字段与源对象完全相同
    深度克隆: 新对象的对象类型的字段也必须克隆, 跟源对象的对象类型字段已经不是同一个对象了 
    下面是普通克隆 public static class CloneTest implements Cloneable{
    private int[] ns; public CloneTest(int n){
    ns=new int[n];
    } public Object clone(){
    try{
    CloneTest cloned=(CloneTest)super.clone();
    return cloned;
    }
    catch(CloneNotSupportedException e){
    }
    return null;
    }
    }深度克隆 public class CloneTest implements Cloneable{
    private int[] ns; public CloneTest(int n){
    ns=new int[n];
    } public Object clone(){
    try{
    CloneTest cloned=(CloneTest)super.clone();
    cloned.ns=this.ns.clone(); // 深度克隆
    return cloned;
    }
    catch(CloneNotSupportedException e){
    }
    return null;
    }
    }
      

  2.   

    相关定义我知道,但是我不想那么费劲的一行一行的写代码,浅表复制好说,但是如果类内有一个field,Object类型,有时候可能是这个类对象,有时候是那个类对象,我这个方法体怎么写。
    我想通过序列化的方式实现,有没有高手给段相关代码
      

  3.   

    能不能给下代码,反射不大会用,找不到私有field。
      

  4.   

    用 getDeclaredFields 方法;
    包括公共、保护、默认(包)访问和私有字段,但不包括继承的字段。
      

  5.   

    用反序列化方式实现深复制,首先保证被复制的对象类实现Serializable接口,类的属性均为基本类型(若有引用类型的话,需要保证次引用类也实现Serializable接口),并在此类中定义一个static final long serialVersionUid=.....,,用getDeclaredFields()获取所有属性,getModifiers获取语言修饰符。等,如果还有啥不懂得,直接API了,