Подтвердить что ты не робот

В чем разница между Collections.emptyList() и Collections.EMPTY_LIST

В Java мы Collections.emptyList() и Коллекции. EMPTY_LIST. Оба имеют одно и то же свойство:

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

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

4b9b3361

Ответ 1

  • 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;
}

Ответ 2

Позволяет добраться до источника:

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

и

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

Ответ 3

Это абсолютно равные объекты.

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

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

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

Ответ 4

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