Qual è la differenza tra Collections.emptyList () e Collections.EMPTY_LIST


Risposte:


130
  • Collections.EMPTY_LIST restituisce un vecchio stile List
  • Collections.emptyList() utilizza l'inferenza del tipo e quindi restituisce List<T>

Collections.emptyList () è stato aggiunto in Java 1.5 ed è probabilmente sempre preferibile . In questo modo, non è necessario eseguire il cast inutilmente all'interno del codice.

Collections.emptyList()intrinsecamente fa il cast per te .

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

1
Non ne sono certo al 100%, ma credo che l'utilizzo / la restituzione della versione non tipizzata (EMPTY_LIST / EMPTY_SET / EMPTY_MAP) faccia sì che il compilatore rinunci al controllo del tipo generics all'interno della catena di chiamate data. In sostanza, immagina di aver vagato nel vecchio codice privo di tipi generici e si arrende.
Matt Passell

18

Andiamo alla fonte:

 public static final List EMPTY_LIST = new EmptyList<>();

e

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

13

Sono oggetti assolutamente uguali.

public static final List EMPTY_LIST = new EmptyList<>();

public static final <T> List<T> emptyList() {
    return (List<T>) EMPTY_LIST;
}

L'unico è che emptyList()restituisce generico List<T>, quindi puoi assegnare questo elenco a una raccolta generica senza alcun avviso.


13

In altre parole, EMPTY_LIST non è indipendente dai tipi:

  List list = Collections.EMPTY_LIST;
  Set set = Collections.EMPTY_SET;
  Map map = Collections.EMPTY_MAP;

Paragonato a:

    List<String> s = Collections.emptyList();
    Set<Long> l = Collections.emptySet();
    Map<Date, String> d = Collections.emptyMap();
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.