首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java中的不可变数组

Java中的不可变数组
EN

Stack Overflow用户
提问于 2010-09-13 21:43:13
回答 11查看 114.6K关注 0票数 165

Java中的原始数组有不可变的替代方法吗?创建一个原语数组final实际上并不能阻止你做类似这样的事情

代码语言:javascript
复制
final int[] array = new int[] {0, 1, 2, 3};
array[0] = 42;

我希望数组的元素是不可更改的。

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2010-09-13 21:45:33

而不是原始数组。您将需要使用列表或其他一些数据结构:

代码语言:javascript
复制
List<Integer> items = Collections.unmodifiableList(Arrays.asList(0,1,2,3));
票数 174
EN

Stack Overflow用户

发布于 2010-09-13 22:27:23

我的建议是不使用数组或unmodifiableList,而是使用GuavaImmutableList,它就是为了这个目的而存在的。

代码语言:javascript
复制
ImmutableList<Integer> values = ImmutableList.of(0, 1, 2, 3);
票数 76
EN

Stack Overflow用户

发布于 2010-09-13 21:53:46

正如其他人所指出的,在Java中不能有不可变的数组。

如果你绝对需要一个返回一个不影响原始数组的数组的方法,那么你每次都需要克隆这个数组:

代码语言:javascript
复制
public int[] getFooArray() {
  return fooArray == null ? null : fooArray.clone();
}

显然,这是相当昂贵的(因为您每次调用getter都会创建一个完整的副本),但是如果您不能更改接口(例如使用List ),并且不能冒险让客户端更改您的内部结构,那么它可能是必要的。

这种技术被称为防御性拷贝。

票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3700971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档