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)并且更具可读性。