问个简单的问题,一个对象如何拷贝到另一个对象中去?

xzytest 2009-10-24 11:29:48
比如现有一个用户对象User,其属性有userid,username,userage(实际很多属性,这里简化)

然后创建两个对象,user1与user2,分别赋值如下:
user1.setUserid(1);
user1.setUsername("name1");

user2.setUserid(1);
user2.setUserage(20);

我如何把user2中的年龄拷贝到user1中去呢?

当然,正常的做法是:user1.setUserage(user2.getUserage());//这个不算
由于属性很多,如果都这样写的话,显然麻烦些,不知道有没更方便的方法呢?
...全文
407 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
湫龙 2012-08-29
  • 打赏
  • 举报
回复
用:a=Ext.apply(a,b);这样就可以将集合b中的元素拷贝到集合a中去了,你可以详情看一下Ext.apply和Ext.applyIf得区别。
zhangyong20081204 2009-10-25
  • 打赏
  • 举报
回复
学习 了。关于这个方面可以用序列化实现吗?我觉得..题的意思是否关心备份...
kuangren987 2009-10-25
  • 打赏
  • 举报
回复
用set方法吧,
潘小江同学 2009-10-25
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 dajiadebeibei9 的回复:]
你看看这个例子
Java code/* 简单类克隆实现
* 要实现克隆,必须实现Cloneable接口,这是一个标识接口,没有接口方法
* 实现了 Cloneable 接口,以指示 Object.clone() 方法可以合法地对该类实例进行按字段复制。
* 按照惯例,实现此接口的类应该使用公共方法重写 Object.clone(它是受保护的)。*/publicclass CloneFooAimplements Cloneable {private String strA;privateint intA;public CloneFooA(String strA,int intA) {this.strA= strA;this.intA= intA;
}public String getStrA() {return strA;
}publicvoid setStrA(String strA) {this.strA= strA;
}publicint getIntA() {return intA;
}publicvoid setIntA(int intA) {this.intA= intA;
}/**
*@return 创建并返回此对象的一个副本。
*@throws CloneNotSupportedException*/public Object clone()throws CloneNotSupportedException {//直接调用父类的clone()方法,返回克隆副本returnsuper.clone();
}
}
[/Quote]
哥们,你那代码怎么弄成这样格式的?
sforiz 2009-10-25
  • 打赏
  • 举报
回复
clone方法
greenbar 2009-10-25
  • 打赏
  • 举报
回复
ddd
JavaShooter 2009-10-25
  • 打赏
  • 举报
回复
克隆方法是可行了,不过有几个问题还是要注意的。
clone是把原对象的值完全地拷贝到克隆的新对象中,如果类中只有基本类型时没有关系,但类中有引用类型时, 就会出现问题(多个引用指向同一个对象)。不过,要看你的clone方法怎么个写法了。你可针对类中对象类型做特殊处理。
如克隆多利羊的例子:
public class Sheep implements Clonable {
private String name;
private Date birth; //做特殊处理

public Object clone() throws .. {
Sheep s = (Sheep) super.clone();
s.setBirth(birth.clone());

return s;
}
}
xzytest 2009-10-24
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 closewbq 的回复:]
办法是有的,只不过比较麻烦!
如果你不想要恢复哪些字段,你就把哪些字段设置成为transient。
然后通过ObjectOutStream对象,通过writeObject(user1);
写出。
然后通过ObjectInputStream的user2=(user)readObject();
读入,那么user2,就是你想要的结果!
这方法有点恶心!嘿嘿
[/Quote]
呵,也算是个方法吧.
不过,若用这个方法,那确实还不如老老实实一个个求值赋值啊.
估计真没更好办法了.......
xzytest 2009-10-24
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 closewbq 的回复:]
汗,你全有了不更好吗?
[/Quote]
不是这样的啊,如果全有了,那我根本不用克隆啊,直接用user1进行相关操作就行了(实际中我不存在不克隆的会产生其它问题).
closewbq 2009-10-24
  • 打赏
  • 举报
回复
办法是有的,只不过比较麻烦!
如果你不想要恢复哪些字段,你就把哪些字段设置成为transient。
然后通过ObjectOutStream对象,通过writeObject(user1);
写出。
然后通过ObjectInputStream的user2=(user)readObject();
读入,那么user2,就是你想要的结果!
这方法有点恶心!嘿嘿
liguominz 2009-10-24
  • 打赏
  • 举报
回复
克隆等于全部属性值都给了u2了
如果你只是部分属性值
还是老老实实用set方法吧~
closewbq 2009-10-24
  • 打赏
  • 举报
回复
汗,你全有了不更好吗?
xzytest 2009-10-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 closewbq 的回复:]
1.将user实现Cloneable接口
2.在user中实现clone()方法
3.在clone方法中直接写:super.clone()。
4.然后就克隆对象就行了User u2 = (User)user1.clone();   
[/Quote]
克隆好像有点问题,如你这里user1克隆出的u2,其实相当于把user1里所有的属性值都给了u2了,
而我实际并不想要user1所有的属性,只是要其中的一部分,如本处我只要userage,其它都不要.
不知道我这样理解对不对?(克隆方法还没去实验)
closewbq 2009-10-24
  • 打赏
  • 举报
回复
1.将user实现Cloneable接口
2.在user中实现clone()方法
3.在clone方法中直接写:super.clone()。
4.然后就克隆对象就行了User u2 = (User)user1.clone();
HelloAldis 2009-10-24
  • 打赏
  • 举报
回复
重写克隆函数
protected native Object clone() throws CloneNotSupportedException;
http://pengcqu.javaeye.com/blog/493120
closewbq 2009-10-24
  • 打赏
  • 举报
回复
克隆
zhangzhongke007 2009-10-24
  • 打赏
  • 举报
回复
不会,帮顶吧!
zhanlang9075 2009-10-24
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 viszl 的回复:]
如果都要某一个字段都要相同,那么用static限定一下就是了,改变一个对象,其他对象的该属性都会改
[/Quote]
楼上的建议个人觉得可行
dajiadebeibei9 2009-10-24
  • 打赏
  • 举报
回复
你看看这个例子

/* 简单类克隆实现
* 要实现克隆,必须实现Cloneable接口,这是一个标识接口,没有接口方法
* 实现了 Cloneable 接口,以指示 Object.clone() 方法可以合法地对该类实例进行按字段复制。
* 按照惯例,实现此接口的类应该使用公共方法重写 Object.clone(它是受保护的)。
*/
public class CloneFooA implements Cloneable {
private String strA;
private int intA;

public CloneFooA(String strA, int intA) {
this.strA = strA;
this.intA = intA;
}

public String getStrA() {
return strA;
}

public void setStrA(String strA) {
this.strA = strA;
}

public int getIntA() {
return intA;
}

public void setIntA(int intA) {
this.intA = intA;
}

/**
* @return 创建并返回此对象的一个副本。
* @throws CloneNotSupportedException
*/
public Object clone() throws CloneNotSupportedException {
//直接调用父类的clone()方法,返回克隆副本
return super.clone();
}
}
blliy117 2009-10-24
  • 打赏
  • 举报
回复
复制的话就用clone吧

我以前做的时候就是用的这个
加载更多回复(5)

62,621

社区成员

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

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