List.of()或Collections.emptyList()

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

继续写

Collections.emptyList(); 

或切换到

 List.of(); 

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

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

  • List.of将在contains(null)调用上抛出exception,如果这些调用由于某些奇怪的原因而发生。
  • 您可以在JDK 8和之前的序列中反序列化emptyList() ,但不能反序列化emptyList()

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

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

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

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