我测试过的Java 9功能之一是创建不可修改列表的List.of()
。我想知道 - 如果此方法返回无法添加/删除/编辑的元素的空列表,它的目的是什么?
我唯一能想到的就是将此列表与另一个空列表进行比较,但是为什么不直接使用someList.isEmpty()
呢?
首先,List.of()
不会创建任何新对象。它指的是一个静态的最终常量,正如我们在 OpenJDK 源代码List.java
.
static <E> List<E> of() {
return ImmutableCollections.List0.instance();
}
。在java.util.ImmutableCollections.List0.instance()
的源代码中:
static <T> List0<T> instance()
return (List0<T>) INSTANCE;
}
List.of()
可以用来返回一个空列表而不是一个null
,这有很多优点:
- 消除
NullPointerException
风险 - 客户端代码不必检查
null
据我所知,此方法的主要用途是调试。如果你想在某个列表上测试你的代码(比如对元素求和(,有一个快速创建列表的方法很方便。由于内部实现,该列表不可变,但这没关系,因为我们只是使用它来测试您的代码一次。
更新:
由于List.of(E e1, E e2, ...(用于调试,因此没有理由不包含没有参数的List.of((,因为在调试时,您通常会检查边缘情况并查看您的代码是否也适用于空列表。