private List<CourseGroupBean> courseGroups = new ArrayList<CourseGroupBean>();
...
courseGroups = getAlgorithmUtil().listCourses();
...
List<CourseGroupBean> courseGroupsTwo = courseGroups;
我知道如果我执行第三行,它会将courseGroups引用到courseGroupsTwo,但我只想分配它的值。如何用Java做到这一点?
修改
我的意思是,当我在courseGroupsTwo删除/添加一个对象时,它在courseGroups上没有任何改变。
答案 0 :(得分:1)
Java本身不支持对象的按值复制,因此您必须自己完成:
List<CourseGroupBean> courseGroupsTwo = new ArrayList<CourseGroupBean>(courseGroups);
将执行courseGroups
的浅表副本,即它将创建一个包含与courseGroups
相同对象的新列表。如果需要,您可以使用更合适的ArrayList
实施替换List
。
如果您愿意,也可以使用clone
。 clone
有点讨厌,因为你需要在克隆之后进行一次演员。转换通常很糟糕,因为它可能会引入运行时错误,而上面的代码会在出现错误时生成编译时错误。
答案 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)