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