Collections.emptyList()和 Collections.EMPTY_LIST 之间的区别是什么

在 Java 中,我们有 Collections.emptyList ()Collections.EMPTY _ LIST,它们具有相同的属性:

返回空列表(不可变)。此列表是可序列化的。

那么,使用其中一种方法与使用另一种方法的确切区别是什么呢?

35236 次浏览
  • Collections.EMPTY_LIST返回一个旧式的 List
  • Collections.emptyList()使用类型推断,因此返回 List<T>

Collections.emptyList ()是在 Java 1.5中添加的,它可能总是更好的 。这样,您就不必在代码中进行不必要的转换。

Collections.emptyList()本质上是 为了你的铸造。

@SuppressWarnings("unchecked")
public static final <T> List<T> emptyList() {
return (List<T>) EMPTY_LIST;
}

它们是绝对平等的对象。

public static final List EMPTY_LIST = new EmptyList<>();


public static final <T> List<T> emptyList() {
return (List<T>) EMPTY_LIST;
}

唯一的问题是,emptyList()返回泛型 List<T>,因此您可以在没有任何警告的情况下将此列表分配给泛型集合。

Lets get to the source :

 public static final List EMPTY_LIST = new EmptyList<>();

还有

@SuppressWarnings("unchecked")
public static final <T> List<T> emptyList() {
return (List<T>) EMPTY_LIST;
}

换句话说,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();