当前页面: 开发资料首页 → J2SE 专题 → 求段java对象clone代码,解决马上结贴
求段java对象clone代码,解决马上结贴
摘要: 求段java对象clone代码,解决马上结贴
public class Test(){
private List emptyClassroom = new ArrayList();
private List offerClassroom = new ArrayList();
//现在想把emptyClassroom作为元素填充到offerClassroom列表中
//emptyClassroom的值是从数据库中查询出来的,保存的是Classroom对象
//将emptyClassroom添加到offerClassroom中,操作offerClassroom列表,
//emptyClassroom列表的值不发生变化,怎么写?
public void add(){
...//怎么写?把emptyClassroom作为元素添加到offerClassroom列表???
}
}
忘说了,这个问题解决,连同
http://community.csdn.net/Expert/TopicView3.asp?id=5156356
这个问题的分子一起结给解决问题的人。。
如果Classroom是java bean,那么可以用Apache Jakarta Commons Beanutils的Bean复制功能
写段代码给你看:
public Classroom copyClassroom(Classroom src){
Classroom dest=new Classroom();
BeanUtils.copyProperties(dest,src);
return dest;
}
public void add(){
Iterator it=emptyClassroom.iterator();
while(it.hasNext()){
offerClassroom.add(copyClassroom((Classroom)it.next()));
}
}
顺便告诉你这个jar的下载地点:
http://jakarta.apache.org/commons/beanutils/
深拷贝的问题呀
学习一下。。。
需要
while(it.hasNext()){
offerClassroom.add(copyClassroom((Classroom)it.next()));
这么复杂吗?
深层复制不好,会破坏原代码的结构!
写个例子给你看
public class Classroom implements Cloneable{
public Object clone() throws CloneNotSupportedException
return super.clone();
}
}
在你原先的类上面加个接口Cloneable,还得覆写clone() 方法。
最后,你还是得:
public void add(){
Iterator it=emptyClassroom.iterator();
while(it.hasNext()){
offerClassroom.add((Classroom)it.next()).clone());
}
}
tcmis(难道你忘了吗?)
是得这么复杂!没有办法的事情。
hbwhwang(catmiw的ID已经停用,现在用这个)
你好,你的意思是不是,如果我要拷贝emptyClassroom列表的值,必须用循环把里面一个一个的值给clone过来,然后再add到offerClassroom里面?这样操作offerClassroom就不会影响到emptyClassroom列表的值?
我的需求是把整个emptyClassroom的值作为一个元素add到offerClassroom。。是不是应该是下面的样子。。。请赐教。。谢谢。
public void add(){
Iterator it=emptyClassroom.iterator();
List newEmptyClassroom = new ArrayList();
while(it.hasNext()){
newEmptyClassroom.add((Classroom)it.next()).clone());
}
offerClassroom.add(newEmptyClassroom);
}
public class Classroom implements Cloneable{
public Object clone() throws CloneNotSupportedException
return super.clone();
}
}
对了,你上面写的是类的clone,我是需要对对像进行clone,,,还是不怎么清楚,,
public class Test(){
private List emptyClassroom = new ArrayList();
private List offerClassroom = new ArrayList();
}
我是不是需要下面这样呢?/
public class Test() implements Cloneable {
private List emptyClassroom = new ArrayList();
private List offerClassroom = new ArrayList();
public Object clone() throws CloneNotSupportedException{
return super.clone();
}
}
我想不通你为什么一定要一起 add,这明显多做了一次无用功嘛。
你写的代码中newEmptyClassroom和offerClassroom一模一样,干嘛不直接往offerClassroom中add呢?
再说一次要点:
1、想复制列表,就得一个一个地复制元素
2、元素的复制不要用clone,如果是JAVABEAN,可以用前面我提到的BeanUtils.copyProperties(dest,src);方法。
因为你是将emptyClassroom里面的值作为一个元素add到offerClassroom里面,而我需要的是整个emtypClassroom作为一个元素add到offerClassroom。
public void add(){
Iterator it=emptyClassroom.iterator();
while(it.hasNext()){
offerClassroom.add((Classroom)it.next()).clone());
}
}
深层挎贝的问题
我终于理解了你的意思,
你是要在一个List1中,放入另一个List2,而List2中装的元素是List3的元素的拷贝。
对不?
如果是这样的话,你这么做:
public Classroom copyClassroom(Classroom src){
Classroom dest=new Classroom();
BeanUtils.copyProperties(dest,src);
return dest;
}
public void add(){
Iterator it=emptyClassroom.iterator();
List newEmptyClassroom = new ArrayList();
while(it.hasNext()){
newEmptyClassroom.add(copyClassroom((Classroom)it.next()));
}
offerClassroom.add(newEmptyClassroom);
}