На 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();