java 泛型 如何克隆?

jyh2004 2011-08-07 12:33:11
public static <T> T clone(T te) {
//如何克隆 te ?
}

如何实现 Object.clone 的功能?

...全文
403 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
雨泽 2012-05-05
  • 打赏
  • 举报
回复
怎么搞定的啊,共享下信息,
jyh2004 2011-09-04
  • 打赏
  • 举报
回复
你们都new了但是值呢?我需要复制的属性值呢?哎,自己已经搞定了。
KG071 2011-08-07
  • 打赏
  • 举报
回复
关注。。。
五哥 2011-08-07
  • 打赏
  • 举报
回复
关注中...
疾风神雷 2011-08-07
  • 打赏
  • 举报
回复
这个泛型对象必须实现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;
}
阳明 to life 2011-08-07
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jyh2004 的回复:]

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

确认后结贴!
[/Quote]
不会 你可以用Class的getName获取类名看下就知道了
String getName()
以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称
jyh2004 2011-08-07
  • 打赏
  • 举报
回复
te.getClass().newInstance();
这样写 从理论上讲是 取了 te的class 类型然后实例化,这样写 不会影响 传入的 Object te 这个引用指向的内存的对象吗?

确认后结贴!
原来缘来 2011-08-07
  • 打赏
  • 举报
回复
楼主用这个方法不一样吗?
public static <T> T clone(Object te) {
//利用发射te.getClass().newInstance();
}

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



62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧