已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题?**添加详细信息并通过editing this post阐明问题。
2天前关闭。
Improve this question
Java 9定义 *JEP 269:用于集合的便利工厂方法 * 和用于集合的新工厂方法。
我们在测试中使用com.google.common.collect
来创建不可变集合,但是有什么区别呢?java.util.List.of
:
List<String> words = List.of("a", "b", "c");
以及com.google.common.collect.ImmutableList.of
:
List<String> words = ImmutableList.of("a", "b", "c");
它只是Java标准版本的Guava集合工厂吗?
值得把所有东西都放进java.util.List.of
吗?
1条答案
按热度按时间qacovj5a1#
在示例中使用时,它们基本上是等效的(除了一些细微的差异)。
值得注意的是,
ImmutableList
(及其of
方法)* 在 * Java引入List.of()
之前就已经存在了,如果Java更早地拥有List.of
,它很可能就不会被开发出来(或者至少不会变得如此流行)。首先,它们有何相似之处:
List<T>
null
值此时最大的实际差异是
ImmutableList.of
实际上返回一个ImmutableList<T>
(它当然实现了List<T>
)。如果你想写一个只能接受不可变列表的方法,这是相关的:
这个方法可以做任何事情,并且知道它保证
stuff
的内容不会改变(当然,其中的单个可变对象可能会改变,但其中的哪些对象不会改变)。对于
List<T>
(List.of()
的返回类型),没有类型系统级别的信息告诉您这个列表是不可变的。**评论时间:**使用JDK标准特性是有价值的,所以我会避免使用
ImmutableList
,除非类型信息部分对于特定用例是 * 非常重要的 *。但是IMO通常可以通过编写一个方法来解决,期望它的参数不会发生变化(无论如何,这是一个非常常见的假设)。