Java List UnsupportedOperationException

1. Übersicht

In diesem kurzen Tutorial wird eine allgemeine Ausnahme erläutert , die bei der Arbeit mit einigen APIs der meisten List- Implementierungen auftreten kann - die UnsupportedOperationException .

Eine java.util.List bietet mehr Funktionen als ein gewöhnlicher, den ein Rray 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 manchmal ein Array in eine Liste oder Sammlung konvertieren .

Eine Einführung in die Kernimplementierung von Java List - die ArrayList - finden Sie in diesem Artikel.

2. UnsupportedOperationException

Dieser Fehler tritt häufig auf, wenn wir die asList () -Methode von java.util.Arrays verwenden:

public static List asList(T... a)

Es gibt zurück:

  • Eine Liste mit fester Größe ab der Größe eines bestimmten Arrays
  • ein Element des gleichen Typs wie das im ursprünglichen Array und es muss ein Objekt sein
  • Elemente in der gleichen Reihenfolgewie im ursprünglichen Array
  • Eine Liste, die serialisierbar ist und RandomAccess implementiert

Da T ein varargs 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ächliches Array übergeben :

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

Da die zurück Liste eine feste Größe ist Liste , können wir nicht hinzufügen / entfernen Elemente .

Ein Versuch, weitere Elemente hinzuzufügen, würde UnsupportedOperationException verursachen :

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

Der Grund für diese Ausnahme ist, dass das zurückgegebene Objekt die Operation add () nicht implementiert , da sie nicht mit java.util.ArrayList identisch ist .

Es ist eine ArrayList von java.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, eine veränderbare Liste zu erhalten, falls wir sie benötigen.

Eine davon besteht darin, eine ArrayList oder eine beliebige Liste direkt aus dem Ergebnis von asList () 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 Beispiele auf GitHub verfügbar.