gpt4 book ai didi

java - Guava ImmutableList...到底是什么支持它?

转载 作者:行者123 更新时间:2023-12-01 06:43:27 25 4
gpt4 key购买 nike

出于好奇,我下载了 Google Guava 的源代码,想看看不可变集合的背后有什么支持。

我正在查看 ImmutableList,我注意到它仍然由老式数组支持,如 Object[]

所以我只是好奇,Object[] 数组本质上可能是可变的,而且它不是线程安全的。我已经知道 ArrayList 和 CopyOnWriteArrayList 由 Object[] 数组支持,但它们是可变的。

那么ImmutableList只是不可变和线程安全的,因为它的内部属性被很好地封装和保护了?它是否也是不可变的和线程安全的,因为封装确保在构造后没有任何东西会修改它?是否有一天,像这样的低级数组将被替换为更好的东西而不是遗留的东西,并且本质上是不可变的和最终的,而不是通过仔细封装而变得不可变?

最佳答案

是的,ImmutableList“只是”不可变,因为它不允许修改其内部支持数组。

这与 java.lang.String 的情况完全相同,它也包装了私有(private) char[]。同样,非常有用的并发库在很大程度上被实现为仅依赖于很少(且非常基本)的 JVM 同步原语的常规 Java 类。

所以这应该足够好了。显然,编写这些库类的人必须小心且知识渊博,但是通过将代码移至更“低级”的 JVM 原语中,这一要求并不会神奇地消失。 (同意,你现在可以使用类似于反射的黑暗巫毒来搬起石头砸自己的脚,但这几乎不会偶然发生,并且在常规使用中,“用户态”实现也同样有效)。

Will there ever be a day

这纯粹是猜测。但显然有关于“值类型”的工作,这是一个相关的主题。

关于java - Guava ImmutableList...到底是什么支持它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27476075/

25 4 0