站内搜索: 请输入搜索关键词

当前页面: 开发资料首页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);

}




↑返回目录
前一篇: executeBatch 出错!! HELP !!!--很急
后一篇: 急+怪:定义了两个单独List类全局变量,操作一个List,另外一个List的值也跟着发生变化