Java List UnsupportedOperationException

Java List UnsupportedOperationException

1. Überblick

In diesem kurzen Tutorial werden wir ein allgemeinesException diskutieren, das auftreten kann, wenn mit einigen APIs der meistenList-Implementierungen gearbeitet wird - demUnsupportedOperationException.

Einjava.util.List hat mehr Funktionen als ein gewöhnliches array unterstützen kann. Mit nur einem integrierten Methodenaufruf kann beispielsweise überprüft werden, ob sich ein bestimmtes Element in der Struktur befindet. Aus diesem Grund müssen wir manchmalarray inList oderCollection konvertieren.

Eine Einführung in die Kernimplementierung von JavaList-ArrayList - finden Sie unterto this article.

2. UnsupportedOperationException

Dieser Fehler tritt häufig auf, wenn wir die MethodeasList() vonjava.util.Arrays: verwenden

public static List asList(T... a)

Es gibt zurück:

  • eine feste GrößeList ab der Größe einer gegebenenarray

  • ein Element des gleichen Typs wie das in den ursprünglichenarray und es muss einObject sein

  • Elemente in derselben Reihenfolge as im ursprünglichen Array

  • Eine Liste, dieserializable ist undRandomAccess implementiert

Da T einvarargs ist, können wir ein Array oder die Elemente direkt als Parameter übergeben, und die Methode erstellt eine initialisierte Liste mit fester Größe:

List flowers = Arrays.asList("Ageratum", "Allium", "Poppy", "Catmint");

Wir können auch ein tatsächlichesarray übergeben:

String[] flowers = { "Ageratum", "Allium", "Poppy", "Catmint" };
List flowerList = Arrays.asList(flowers);

Since the returned List is a fixed-size List, we can’t add/remove elements.

Ein Versuch, weitere Elemente hinzuzufügen, würdeUnsupportedOperationException verursachen:

String[] flowers = { "Ageratum", "Allium", "Poppy", "Catmint" };
List flowerList = Arrays.asList(flowers);
flowerList.add("Celosia");

Die Wurzel diesesException ist, dass das zurückgegebene Objekt die Operationadd() nicht implementiert, da es nicht mitjava.util.ArrayList. identisch ist

Es ist einArrayList vonjava.util.Arrays.

Eine andere Möglichkeit, dieselbe Ausnahme zu erhalten, besteht darin, ein Element aus der erhaltenen Liste zu entfernen.

Auf der anderen Seite gibt es Möglichkeiten, ein veränderlichesList zu erhalten, falls wir es brauchen.

Eine davon besteht darin, einArrayList oder eine beliebige Liste direkt aus dem Ergebnis vonasList() zu erstellen:

String[] flowers = { "Ageratum", "Allium", "Poppy", "Catmint" };
List flowerList = new ArrayList<>(Arrays.asList(flowers));

3. Fazit

Zusammenfassend ist es wichtig zu verstehen, dass das Hinzufügen weiterer Elemente zu einer Liste nicht nur für unveränderliche Listen problematisch sein kann.

Wie immer ist der vollständige Quellcode der Beispieleover on GitHub verfügbar.