通过Java中的值在非原始变量之间进行分配

时间:2011-01-05 14:40:48

标签: java list variable-assignment

private List<CourseGroupBean> courseGroups = new ArrayList<CourseGroupBean>();
...
courseGroups = getAlgorithmUtil().listCourses();
...
List<CourseGroupBean> courseGroupsTwo = courseGroups;

我知道如果我执行第三行,它会将courseGroups引用到courseGroupsTwo,但我只想分配它的值。如何用Java做到这一点?

修改

我的意思是,当我在courseGroupsTwo删除/添加一个对象时,它在courseGroups上没有任何改变。

4 个答案:

答案 0 :(得分:1)

Java本身不支持对象的按值复制,因此您必须自己完成:

List<CourseGroupBean> courseGroupsTwo = new ArrayList<CourseGroupBean>(courseGroups);

将执行courseGroups的浅表副本,即它将创建一个包含与courseGroups相同对象的新列表。如果需要,您可以使用更合适的ArrayList实施替换List

如果您愿意,也可以使用cloneclone有点讨厌,因为你需要在克隆之后进行一次演员。转换通常很糟糕,因为它可能会引入运行时错误,而上面的代码会在出现错误时生成编译时错误。

答案 1 :(得分:0)

您需要对列表进行“深层复制”。请参阅此StackOverflow answer

答案 2 :(得分:0)

     List<CourseGroupBean> courseGroupsTwo = (ArrayList<CourseGroupsBean>) courseGroups.clone();

但不仅仅是调用.clone()。根据以下资源,您的类也必须实现Cloneable接口;否则,抛出CloneNotSupportedException:

http://www.roseindia.net/java/example/java/util/clone-method-example-in-java.shtml

答案 3 :(得分:0)

调用构造函数ArrayList(Collection<? extends E>)

List<CourseGroupBean> courseGroupsTwo = new ArrayList<CourseGroupBean>(courseGroups)