public static <T> T clone(T te) {
//如何克隆 te  ?
}如何实现 Object.clone 的功能?

解决方案 »

  1.   

    楼主用这个方法不一样吗?
    public static <T> T clone(Object te) {
        //利用发射te.getClass().newInstance();
    }

    //传递时用obj.getClass()
    public static <T> T clone(Class te) {
        //te.newInstance();
    }
      
      

  2.   

    te.getClass().newInstance();
    这样写 从理论上讲是 取了 te的class 类型然后实例化,这样写 不会影响 传入的 Object te 这个引用指向的内存的对象吗?确认后结贴!
      

  3.   

    不会 你可以用Class的getName获取类名看下就知道了
    String getName() 
              以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称 
      

  4.   

    这个泛型对象必须实现Clonable接口,否则如果该对象所有需复制的属性都有get set方法且属性本身也符合这样的规范,这样也可以通过反射进行深度克隆。public static Object cloneObject_recursion(Object obj){
    if(obj==null){
    return null;
    }
    Object newObject=null;
    Class<?> clazz=obj.getClass();
    if(isBaseData(clazz)){
    return cloneBasicData(obj);
    }else{
    try {
    if(clazz.isArray()){
    Object newArray=Array.newInstance(clazz.getComponentType(),Array.getLength(obj));
    for(int i=0;i<Array.getLength(obj);i++){
    Object temp_obj=getElement(obj,i);
    setElement(newArray,i,cloneObject_recursion(temp_obj));
    }
    return newArray;
    }
    newObject=clazz.newInstance();
    }catch(InstantiationException e){
    e.printStackTrace();
    }catch(IllegalAccessException e){
    e.printStackTrace();
    }
    Field[] fields=clazz.getDeclaredFields();
    for(int i=0;i<fields.length;i++){
    Object property=getProperty(obj,fields[i]);
    setProperty(newObject,fields[i],cloneObject_recursion(property));
    }
    }
    return newObject;
    }
      

  5.   

    你们都new了但是值呢?我需要复制的属性值呢?哎,自己已经搞定了。