【发布时间】:2020-08-16 07:31:44
【问题描述】:
我正在学习 Java 集合框架。
我无法理解集合的层次结构。
由于ArrayList实现了List接口,我们可以使用
List<String> list = new ArrayList();
然而,在
List<String> names = List.of("Larry", "Kenny", "Sabrina");
,List.of()method 返回 ImmutableCollections.List12
我从未听说过 Collection 层次结构中的那个类,我发现它没有实现 List 接口(那么它是如何转换为 List 的?)
另外,我觉得我不能通过 ImmutalbeList 来制作很奇怪
List<String> names = new ImmutableList("Larry", "Kenny", "Sabrina");
我对 Kotlin 知之甚少,可变和不可变之间存在层次结构。但我在 Java 中找不到它们之间的任何联系。
这里发生了什么?
【问题讨论】:
-
List12扩展AbstractImmutableList实现List。 -
实际实施细节有所不同。也考虑查看源代码
-
如果这是出于好奇:很好。但是,一般来说,文档说
List.of返回一个List,这就是您应该关心的全部。它返回的具体类型是一个实现细节。 -
Java 标准库没有不可变的集合接口。一切都是可变的。不可变集合通过更新
add()throwingUnsupportedOperationException等方法实现。
标签: java collections immutability