【发布时间】:2017-12-15 22:24:09
【问题描述】:
为了说明我的担忧,我将使用以下不完整的测试类:
import java.util.ArrayList;
public class Test
{
private int[] myArray = {1,2,3,4,5};
private ArrayList<Integer> myArrayList = new ArrayList<Integer>();
public int[] getMyArray()
{
int[] temp = new int[myArray.length];
for(int i = 0;i<myArray.length;++i)
{
temp[i] = this.myArray[i];
}
return temp;
}
public ArrayList<Integer> getMyArrayList()
{
ArrayList<Integer> temp = new ArrayList<Integer>();
for(int i = 0;i<myArrayList.size();++i)
{
temp.add(this.myArrayList.get(i));
}
return temp;
}
public void setMyArray(int[] newArray)
{
if(newArray.length!=myArray.length)
{
return;
}
for(int i = 0;i<myArray.length;++i)
{
this.myArray[i] = newArray[i];
}
}
public void setMyArrayList(ArrayList<Integer> newArrayList)
{
for(int i = 0;i<myArrayList.size();++i)
{
this.myArrayList.add(newArrayList.get(i));
}
}
}
我用上面的代码说明的是分别为 Arrays 和 ArrayLists 实现 getter 和 setter 方法的正确方法吗?我认为最好在 getter 方法中返回 Arrays 和 ArrayLists 的副本,并在 setter 方法中设置 Array/ArrayLists 中的每个单独元素。如果这是不正确的,请说明实现这些方法的正确方法。
【问题讨论】:
-
你知道有一个copy constructor 和addAll 而不是你自己做的。
-
如果你想让这个类不可变,也一定要对你的元素进行深拷贝。