List.of()或Collections.emptyList()

时间:2016-09-08 21:09:00

标签: java collections java-9

作为List.of(...) or Collections.unmodifiableList()的一个特例 - 指向不可变列表的首选Java 9方式是什么?

继续写作

Collections.emptyList();

或切换到

List.of();

3 个答案:

答案 0 :(得分:12)

Collections.emptyList()不需要为每个调用创建一个新对象;通常,as in OpenJDK只返回单个EMPTY_LIST对象。此外,您打算表示一个空列表而不是忘记填写占位符更清楚。

使用emptyList();它更快(达到Java目标级别1.9)并且更具可读性。

答案 1 :(得分:1)

  

指向空且不可变列表的首选Java 9方法是什么?

差异相当微妙,所以“首选”取决于你想要达到的目标。一些行为差异:

  • List.of会在contains(null)次调用时抛出异常,如果这些异常发生的话。
  • 您可以在JDK 8和之前的版本上反序列化emptyList(),但不能List.of

就你想要一个空列表而言,emptyList()可能看起来更好,但这只是一个临时约定。如果开发人员开始使用List.of()(比Collections.emptyList()短得多),那么它将成为一种已知且被接受的方式,它只是新的。如果你考虑一下,我们使用的一些结构并不总能表达他们自己做的事情,但我们已经习惯了它们。

所以没有严格的首选方式。如果行为无关紧要,请使用您想要的任何内容。

答案 2 :(得分:1)

  1. emptyList() 创建一个新的空列表实例仅一次
  2. 可读性没有区别:也许 List.of()Collections.emptyList() 更短,但您可以使用像 import static java.util.Collections.emptyList; 这样的静态导入,然后只写 {{ 1}}