En Java, tenemos Collections.emptyList () y Collections.EMPTY_LIST . Ambos tienen la misma propiedad:
Devuelve la lista vacía (inmutable). Esta lista se puede serializar.
Entonces, ¿cuál es la diferencia exacta entre usar uno u otro?
En Java, tenemos Collections.emptyList () y Collections.EMPTY_LIST . Ambos tienen la misma propiedad:
Devuelve la lista vacía (inmutable). Esta lista se puede serializar.
Entonces, ¿cuál es la diferencia exacta entre usar uno u otro?
Respuestas:
Collections.EMPTY_LIST
devuelve un estilo antiguo List
Collections.emptyList()
usa la inferencia de tipo y, por lo tanto, devuelve
List<T>
Collections.emptyList () se agregó en Java 1.5 y probablemente siempre sea preferible . De esta manera, no es necesario realizar búsquedas innecesarias en su código.
Collections.emptyList()
intrínsecamente lo hace por ti .
@SuppressWarnings("unchecked")
public static final <T> List<T> emptyList() {
return (List<T>) EMPTY_LIST;
}
Vayamos a la fuente:
public static final List EMPTY_LIST = new EmptyList<>();
y
@SuppressWarnings("unchecked")
public static final <T> List<T> emptyList() {
return (List<T>) EMPTY_LIST;
}
Son objetos absolutamente iguales.
public static final List EMPTY_LIST = new EmptyList<>();
public static final <T> List<T> emptyList() {
return (List<T>) EMPTY_LIST;
}
El único es que emptyList()
devuelve genérico List<T>
, por lo que puede asignar esta lista a la colección genérica sin advertencias.
En otras palabras, EMPTY_LIST no es seguro de tipos:
List list = Collections.EMPTY_LIST;
Set set = Collections.EMPTY_SET;
Map map = Collections.EMPTY_MAP;
En comparación con:
List<String> s = Collections.emptyList();
Set<Long> l = Collections.emptySet();
Map<Date, String> d = Collections.emptyMap();