gpt4 book ai didi

java - 数组的 getter 和 setter

转载 作者:搜寻专家 更新时间:2023-10-30 21:29:31 24 4
gpt4 key购买 nike

我有几个关于数组的 getter 和 setter 的问题。假设我们有一个这样的类,它在其构造函数中创建一个数组的私有(private)副本:

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;
}
}

对于这样一个琐碎的任务来说,代码很多,更重要的是,实际使用起来很乱。我们真的必须以这样的方式结束,还是有更好的方法来做到这一点?我到处查看,似乎没有这方面的“标准做法”。

最佳答案

多维数组也是一维数组:int[a][b][c] 实际上只是 int[a*b*c],所以问题归结为,您如何安全地提供访问权限?就像这样:

public class Foo {
private int[] array;

public Foo(int[] array) {
this.array = Arrays.copyOf(array, array.length);
}

/** @return a copy of the array */
public int[] getArray() {
return Arrays.copyOf(array, array.length);
}
}

就是这样。

调用方拥有数组的安全副本,可以按照数组的完整正常方式使用它。不需要委托(delegate)方法。

关于java - 数组的 getter 和 setter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6665150/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com