Set.of 对比 Collections.singleton

Set.of vs Collections.singleton

既然Set.of(E e)的不可变实现已经在Java 9中引入了,我们还需要使用Collections.singleton(E e)吗?后一个的用例是什么?

从这两个实现的源代码来看,似乎并不明显。除了 Set12 实现明确拒绝反序列化之外,我没有看到任何显着差异。

我个人会为所有新代码选择 Set.of(...) 至少因为时尚的观点(更短的代码,更少的导入)。但可能我遗漏了一些关键点?

这两种方法的行为几乎相同。我能想到的唯一区别是 Collections.singleton() 允许 null 元素,而 Set.of() 不允许。

这会起作用:

Set<String> setofnull = Collections.singleton(null);

这不会(它会抛出 NullPointerException):

Set<String> setofnull = Set.of(null);

如果您放入 Set 的元素不能是 null,我也会选择 Set.of()