2013-02-14 17 views

risposta

84
  • Collections.EMPTY_LIST restituisce un vecchio stile List
  • Collections.emptyList() utilizza tipo di inferenza 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 il cast per voi.

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

Non ne sono sicuro 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 generico all'interno della catena di chiamate data. Dipende essenzialmente dal fatto di aver vagato nel vecchio codice privo di tipi generici e di rinunciare. –

9

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 i rendimenti emptyList() generica List<T>, in modo da poter assegnare questo elenco per la raccolta generica senza eventuali avvisi.

15

consente di arrivare 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; 
} 
8

In altre parole, EMPTY_LIST non è di tipo sicuro:

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

Rispetto a:

List<String> s = Collections.emptyList(); 
    Set<Long> l = Collections.emptySet(); 
    Map<Date, String> d = Collections.emptyMap(); 
Problemi correlati