【发布时间】:2011-10-03 15:44:33
【问题描述】:
我有几个关于数组的 getter 和 setter 的问题。假设我们有一个像这样的类,它在其构造函数中创建一个数组的私有副本:
import java.util.Arrays;
public class Foo
{
private int[] array;
public Foo(int[] array) {
this.array = Arrays.copyOf(array, array.length);
}
}
我们希望仅通过 getter 和 setter 访问/更改数组。如果我们有一个看起来像这样的 getter:
public int[] getArray() {
return array;
}
当我们返回一个允许用户直接修改数组元素的引用时,它违背了 getter 的目的。例如
Foo foo = new Foo(someArray);
...
int[] bar = foo.getArray();
bar[0] = 123; // Now foo.array[0] = 123 and we haven't used a setter!
所以大概我们需要这样的东西:
public int getElement(int index) {
return array[index];
}
对于二传手也是如此。但是,如果我们在每个元素的基础上做事,我们还需要提供一种获取长度的方法:
public int getArrayLength() {
return array.length;
}
这对于一维数组来说已经有点乱了,但假设我们有一个多维数组:
import java.util.Arrays;
public class Foo
{
private int[][][] array;
public Foo(int[][][] array) {
// Code for making a deep copy here
}
public int getElement(int i, int j, int k) {
return array[i][j][k];
}
public void setElement(int i, int j, int k, int value) {
array[i][j][k] = value;
}
public int getArrayLength() {
return array.length;
}
public int getArrayLength(int i) {
return array[i].length;
}
public int getArrayLength(int i, int j) {
return array[i][j].length;
}
}
对于这样一个微不足道的任务,这是很多代码,更重要的是,实际使用起来很乱。我们真的必须以这样的方式结束,还是有更好的方法来做到这一点?我到处查看,似乎没有“标准做法”。
【问题讨论】:
标签: java arrays multidimensional-array getter-setter