What is the difference between Collections.emptyList() and Collections.EMPTY_LIST

后端 未结 4 1519
感动是毒
感动是毒 2020-12-01 04:18

In Java, we have Collections.emptyList() and Collections.EMPTY_LIST. Both have the same property:

Returns the empty list (immutable). This list is ser

相关标签:
4条回答
  • 2020-12-01 04:32

    In other words, EMPTY_LIST is not type safe:

      List list = Collections.EMPTY_LIST;
      Set set = Collections.EMPTY_SET;
      Map map = Collections.EMPTY_MAP;
    

    As compared to:

        List<String> s = Collections.emptyList();
        Set<Long> l = Collections.emptySet();
        Map<Date, String> d = Collections.emptyMap();
    
    0 讨论(0)
  • 2020-12-01 04:45

    Lets get to the source :

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

    and

    @SuppressWarnings("unchecked")
    public static final <T> List<T> emptyList() {
        return (List<T>) EMPTY_LIST;
    }
    
    0 讨论(0)
  • 2020-12-01 04:47

    They are absolutely equal objects.

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

    The only one is that emptyList() returns generic List<T>, so you can assign this list to generic collection without any warnings.

    0 讨论(0)
  • 2020-12-01 04:51
    • Collections.EMPTY_LIST returns an old-style List
    • Collections.emptyList() uses type-inference and therefore returns List<T>

    Collections.emptyList() was added in Java 1.5 and it is probably always preferable. This way, you don't need to unnecessarily cast around within your code.

    Collections.emptyList() intrinsically does the cast for you.

    @SuppressWarnings("unchecked")
    public static final <T> List<T> emptyList() {
        return (List<T>) EMPTY_LIST;
    }
    
    0 讨论(0)
提交回复
热议问题