50

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

继续写

Collections.emptyList();

或切换到

List.of();
4

3 回答 3

30

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

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

于 2016-09-08T21:14:18.253 回答
17

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

差异相当微妙,因此“首选”取决于您想要实现的目标。一些行为差异:

  • List.ofcontains(null)调用时会抛出异常。
  • 您可以emptyList()在 JDK 8 和更早版本上反序列化,但不能在List.of.

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

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

于 2017-10-07T11:41:41.397 回答
1
  1. emptyList() 创建一次新的空列表实例
  2. 可读性没有区别:也许List.of()比短,Collections.emptyList()但你可以使用静态导入import static java.util.Collections.emptyList;,然后只写emptyList()
于 2021-03-19T09:40:31.883 回答