我对Java及其传值概念稍微有点新意,我仍然接受它的约束。我有关于此代码的以下代码和问题。
问题:1)我当前的代码是否会进行深层复制?或者我也必须为A类做一个深层复制?
问题:2)深层复制是否会阻止我在班级传递的para1的更改?
提前感谢您的帮助。
此致 阿图。
public class A {
private Double value;
}
public class I {
private Hashtable<Long, A> f2 = null;
I(I oldI){
f2 = new Hastable<Long, A>(oldI);
}
}
public class k {
private HashMap<Long, I > ob1 = null;
private HashMap<Long, I> ob2 = null;
k(Vector<I> para1){
ob1 = new HashMap<Long, I >();
for(int i=0; i < para1.size(); i++){
/* Question: 1 */
ob1.put((long) i, new I(para1.get(i)));
}
}
}
答案 0 :(得分:2)
1。)没有你当前的代码没有给你一份深刻的副本。如果你想要做一个深层复制,你也必须克隆复杂的内部类。
2。)是的,如果您在对象2中进行更改,则深层复制将阻止对象1的更改,即使对象2是对象1的克隆。
http://www.javaworld.com/javaworld/javatips/jw-javatip76.html
答案 1 :(得分:1)
如果目标是阻止修改,那么java.util.Collections中的一个或多个“不可修改”方法(如unmodifiableMap)可能会有所帮助。
答案 2 :(得分:0)
Google Guava有一些不可变的集合,它们是实际的副本,而不是原始的集合。
最近有一些很好的介绍进入互联网:http://marxsoftware.blogspot.com/2011/10/immutable-collections-guava-style.html