В чем разница между Collections.emptyList() и Collections.EMPTY_LIST
В Java мы Collections.emptyList() и Коллекции. EMPTY_LIST. Оба имеют одно и то же свойство:
Возвращает пустой список (неизменный). Этот список является сериализуемым.
Так в чем же разница между использованием одного или другого?
Ответы
Ответ 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();