Java中的原始数组有不可变的替代方法吗?创建一个原语数组final
实际上并不能阻止你做类似这样的事情
final int[] array = new int[] {0, 1, 2, 3};
array[0] = 42;
我希望数组的元素是不可更改的。
发布于 2010-09-13 21:45:33
而不是原始数组。您将需要使用列表或其他一些数据结构:
List<Integer> items = Collections.unmodifiableList(Arrays.asList(0,1,2,3));
发布于 2010-09-13 22:27:23
我的建议是不使用数组或unmodifiableList
,而是使用Guava的ImmutableList,它就是为了这个目的而存在的。
ImmutableList<Integer> values = ImmutableList.of(0, 1, 2, 3);
发布于 2010-09-13 21:53:46
正如其他人所指出的,在Java中不能有不可变的数组。
如果你绝对需要一个返回一个不影响原始数组的数组的方法,那么你每次都需要克隆这个数组:
public int[] getFooArray() {
return fooArray == null ? null : fooArray.clone();
}
显然,这是相当昂贵的(因为您每次调用getter都会创建一个完整的副本),但是如果您不能更改接口(例如使用List
),并且不能冒险让客户端更改您的内部结构,那么它可能是必要的。
这种技术被称为防御性拷贝。
https://stackoverflow.com/questions/3700971
复制相似问题