Set.of 与 Collections.singleton

And*_*niy 4 java singleton set java-9

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

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

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

Era*_*ran 6

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

这将起作用:

Set<String> setofnull = Collections.singleton(null);
Run Code Online (Sandbox Code Playgroud)

这不会(它会抛出NullPointerException):

Set<String> setofnull = Set.of(null);
Run Code Online (Sandbox Code Playgroud)

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

  • 在我看来,他们应该弃用“Collections.singleton()”。有两种方法做几乎相同的事情从来都不是一件好事 (2认同)