Quelle est la différence entre Collections.emptyList () et Collections.EMPTY_LIST


Réponses:


130
  • Collections.EMPTY_LIST renvoie un style ancien List
  • Collections.emptyList() utilise l'inférence de type et renvoie donc List<T>

Collections.emptyList () a été ajouté dans Java 1.5 et il est probablement toujours préférable . De cette façon, vous n'avez pas besoin de balayer inutilement votre code.

Collections.emptyList()fait intrinsèquement le casting pour vous .

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

1
Je ne suis pas sûr à 100% de cela, mais je pense que l'utilisation / le retour de la version non typée (EMPTY_LIST / EMPTY_SET / EMPTY_MAP) fait que le compilateur abandonne la vérification de type générique dans la chaîne d'appels donnée. Il suppose essentiellement qu'il s'est égaré dans un ancien code dépourvu de types génériques et qu'il abandonne.
Matt Passell

18

Allons à la source:

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

et

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

13

Ce sont des objets absolument égaux.

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

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

Le seul est que emptyList()renvoie générique List<T>, vous pouvez donc affecter cette liste à une collection générique sans aucun avertissement.


13

En d'autres termes, EMPTY_LIST n'est pas de type sécurisé:

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

Par rapport à:

    List<String> s = Collections.emptyList();
    Set<Long> l = Collections.emptySet();
    Map<Date, String> d = Collections.emptyMap();
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.