/ / ¿Cuál es la diferencia entre Collections.emptyList () y Collections.EMPTY_LIST - java, lista, colecciones

Cuál es la diferencia entre Collections.emptyList () y Collections.EMPTY_LIST - java, list, collections

En Java, tenemos Colecciones.emptyList () y Colecciones.EMPTY_LIST. Ambos tienen la misma propiedad:

Devuelve la lista vacía (inmutable). Esta lista es serializable.

Entonces, ¿cuál es la diferencia exacta entre usar uno u otro?

Respuestas

92 para la respuesta № 1
  • Collections.EMPTY_LIST devuelve un estilo antiguo List
  • Collections.emptyList() usa inferencia de tipo y por lo tanto devuelve List<T>

Se agregó Collections.emptyList () en Java 1.5 y probablemente siempre sea preferible. De esta manera, no es necesario que se convierta innecesariamente en su código.

Collections.emptyList() intrínsecamente hace el elenco para ti.

@SuppressWarnings("unchecked")
public static final <T> List<T> emptyList() {
return (List<T>) EMPTY_LIST;
}

16 para la respuesta № 2

Vamos a llegar 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;
}

12 para la respuesta № 3

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 una colección genérica sin ninguna advertencia.


8 para la respuesta № 4

En otras palabras, EMPTY_LIST no es de tipo seguro:

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