Was ist der Unterschied zwischen Collections.emptyList () und Collections.EMPTY_LIST?


Antworten:


129
  • Collections.EMPTY_LIST gibt einen alten Stil zurück List
  • Collections.emptyList() verwendet Typinferenz und gibt daher zurück List<T>

Collections.emptyList () wurde in Java 1.5 hinzugefügt und ist wahrscheinlich immer vorzuziehen . Auf diese Weise müssen Sie nicht unnötig in Ihrem Code herumspielen.

Collections.emptyList()macht die Besetzung für Sie .

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

1
Ich bin mir dessen nicht 100% sicher, aber ich glaube, dass die Verwendung / Rückgabe der untypisierten Version (EMPTY_LIST / EMPTY_SET / EMPTY_MAP) dazu führt, dass der Compiler die Überprüfung des generischen Typs innerhalb der angegebenen Aufrufkette aufgibt. Es stellt sich im Wesentlichen heraus, dass es in alten Code ohne generische Typen gewandert ist und aufgibt.
Matt Passell

18

Kommen wir zur Quelle:

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

und

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

13

Sie sind absolut gleiche Objekte.

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

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

Die einzige ist, dass emptyList()generisch zurückgegeben wird List<T>, sodass Sie diese Liste ohne Warnungen der generischen Sammlung zuweisen können.


13

Mit anderen Worten, EMPTY_LIST ist nicht typsicher:

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

Verglichen mit:

    List<String> s = Collections.emptyList();
    Set<Long> l = Collections.emptySet();
    Map<Date, String> d = Collections.emptyMap();
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.