在Java中,我们有Collections.emptyList()和Collections.EMPTY_LIST。两者都具有相同的属性:
返回空列表(不可变)。此列表是可序列化的。
那么使用这一个或另一个之间的确切区别是什么?
答案 0 :(得分:108)
Collections.EMPTY_LIST
返回旧式 List
Collections.emptyList()
使用类型推断,因此返回
的 List<T>
强> 在Java 1.5中添加了Collections.emptyList(),它可能总是更可取。这样,您就不需要在代码中进行不必要的转换。
Collections.emptyList()
本质上为您执行演员。
@SuppressWarnings("unchecked")
public static final <T> List<T> emptyList() {
return (List<T>) EMPTY_LIST;
}
答案 1 :(得分:16)
让我们来源:
public static final List EMPTY_LIST = new EmptyList<>();
和
@SuppressWarnings("unchecked")
public static final <T> List<T> emptyList() {
return (List<T>) EMPTY_LIST;
}
答案 2 :(得分:13)
它们是绝对平等的对象。
public static final List EMPTY_LIST = new EmptyList<>();
public static final <T> List<T> emptyList() {
return (List<T>) EMPTY_LIST;
}
唯一的一个是emptyList()
返回通用List<T>
,因此您可以将此列表分配给通用集合,而不会发出任何警告。
答案 3 :(得分:10)
换句话说,EMPTY_LIST不是类型安全的:
List list = Collections.EMPTY_LIST;
Set set = Collections.EMPTY_SET;
Map map = Collections.EMPTY_MAP;
与:相比:
List<String> s = Collections.emptyList();
Set<Long> l = Collections.emptySet();
Map<Date, String> d = Collections.emptyMap();