W Javie mamy Collections.emptyList () i Collections.EMPTY_LIST . Obie mają tę samą właściwość:
Zwraca pustą listę (niezmienną). Ta lista jest serializowalna.
Jaka jest więc dokładna różnica między używaniem jednego lub drugiego?
W Javie mamy Collections.emptyList () i Collections.EMPTY_LIST . Obie mają tę samą właściwość:
Zwraca pustą listę (niezmienną). Ta lista jest serializowalna.
Jaka jest więc dokładna różnica między używaniem jednego lub drugiego?
Odpowiedzi:
Collections.EMPTY_LIST
zwraca stary styl List
Collections.emptyList()
używa wnioskowania o typie i dlatego zwraca
List<T>
Collection.emptyList () została dodana w Javie 1.5 i prawdopodobnie zawsze jest preferowana . W ten sposób nie musisz niepotrzebnie przesyłać w swoim kodzie.
Collections.emptyList()
z natury rzeczy obsada za Ciebie .
@SuppressWarnings("unchecked")
public static final <T> List<T> emptyList() {
return (List<T>) EMPTY_LIST;
}
Przejdźmy do źródła:
public static final List EMPTY_LIST = new EmptyList<>();
i
@SuppressWarnings("unchecked")
public static final <T> List<T> emptyList() {
return (List<T>) EMPTY_LIST;
}
Są absolutnie równymi obiektami.
public static final List EMPTY_LIST = new EmptyList<>();
public static final <T> List<T> emptyList() {
return (List<T>) EMPTY_LIST;
}
Jedynym jest emptyList()
zwracanie ogólnej List<T>
, więc możesz przypisać tę listę do ogólnej kolekcji bez żadnych ostrzeżeń.
Innymi słowy, EMPTY_LIST nie jest bezpiecznym typem:
List list = Collections.EMPTY_LIST;
Set set = Collections.EMPTY_SET;
Map map = Collections.EMPTY_MAP;
W porównaniu do:
List<String> s = Collections.emptyList();
Set<Long> l = Collections.emptySet();
Map<Date, String> d = Collections.emptyMap();