В чем разница между коллекциями.emptyList() и коллекций.ПУСТОЙ СПИСОК


в Java, у нас есть сборники.emptyList() и сборники.EMPTY_LIST. Оба имеют одинаковое свойство:

возвращает пустой список (неизменяемые). Этот список можно сериализовать.

Так в чем же разница между использованием одного или другого?

4 79

4 ответа:

  • Collections.EMPTY_LIST возвращает старый стиль List
  • Collections.emptyList() использует вывод типа и поэтому возвращает List<T>

коллекций.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() возвращает generic List<T>, Так что вы можете назначить этот список для общей коллекции без каких-либо предупреждений.

другими словами, 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();