Collections.emptyList()和Collections.EMPTY_LIST有什么区别

在Java中,我们有Collections.emptyList()和Collections.EMPTY_LIST 。 两者都有相同的属性:

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

那么使用这个或那个之间的确切区别是什么?

  • Collections.EMPTY_LIST返回一个旧样式的List
  • Collections.emptyList()使用types推断,因此返回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<>(); 

 @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()返回genericsList<T> ,所以你可以将这个列表分配给generics集合而不会有任何警告。

换句话说,EMPTY_LIST不是types安全的:

  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();