¿Cuál es la diferencia entre Collections.emptyList () y Collections.EMPTY_LIST


Respuestas:


130
  • 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;
}

1
No estoy 100% seguro de esto, pero creo que usar / devolver la versión sin tipo (EMPTY_LIST / EMPTY_SET / EMPTY_MAP) hace que el compilador abandone la verificación de tipos genéricos dentro de la cadena de llamadas dada. Básicamente, imagina que se ha adentrado en un código antiguo que carece de tipos genéricos y se rinde.
Matt Passell

18

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;
}

13

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.


13

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();
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.