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

Lesezeit: 2 Minuten

In Java haben wir Collections.emptyList() und Sammlungen.EMPTY_LIST. Beide haben die gleiche Eigenschaft:

Gibt die leere Liste zurück (unveränderlich). Diese Liste ist serialisierbar.

Was ist also der genaue Unterschied zwischen der Verwendung des einen oder des anderen?

Benutzer-Avatar
poitroae

  • Collections.EMPTY_LIST gibt einen alten Stil zurück List
  • Collections.emptyList() verwendet Typrückschluss 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 herumsuchen.

Collections.emptyList() macht eigentlich die Besetzung für dich.

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

  • Ich bin mir dessen nicht zu 100 % sicher, aber ich glaube, dass die Verwendung/Rückgabe der nicht typisierten 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 im Wesentlichen fest, dass es in alten Code geraten ist, dem generische Typen fehlen, und aufgibt.

    – Matt Passell

    23. September 2015 um 17:43 Uhr

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

Benutzer-Avatar
mel3kings

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();

Sie sind absolut gleichwertige Objekte.

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

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

Das einzige ist das emptyList() gibt generisch zurück List<T>sodass Sie diese Liste ohne Warnungen einer generischen Sammlung zuweisen können.

1312360cookie-checkWas ist der Unterschied zwischen Collections.emptyList() und Collections.EMPTY_LIST

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy