Zoznam Java UnsupportedOperationException

1. Prehľad

V tomto rýchlom návode si povieme niečo spoločné Výnimka ktoré sa môžu vyskytnúť pri práci s niektorými API väčšiny Zoznam implementácie - UnsupportedOperationException.

A java.util.List má viac funkcií ako bežné array môže podporovať. Napríklad iba s jedným zabudovaným volaním metódy je možné skontrolovať, či sa vo vnútri štruktúry nachádza konkrétny prvok. To je zvyčajne dôvod, prečo niekedy potrebujeme konvertovať pole do a Zoznam alebo Zbierka.

Pre úvod do jadra Javy Zoznam implementácia - ArrayList - prečítajte si tento článok.

2. UnsupportedOperationException

Táto chyba sa často vyskytuje, keď ju používame asList () metóda z java.util.Arrays:

verejný statický zoznam ako zoznam (T ... a)

Vráti:

  • pevná veľkosť Zoznam ako veľkosť daného pole
  • prvok rovnakého typu ako ten v origináli pole a to musí byť Objekt
  • prvky v rovnakom poradíako v pôvodnom poli
  • zoznam, ktorý je serializovateľné a náradie Náhodný prístup

Keďže T je a varargs, môžeme priamo odovzdať pole alebo položky ako parametre a metóda vytvorí inicializovaný zoznam pevnej veľkosti:

Zoznam kvetov = Arrays.asList ("Ageratum", "Allium", "Poppy", "Catmint");

Môžeme tiež odovzdať skutočný údaj pole:

Reťazec [] kvety = {"Ageratum", "Allium", "Poppy", "Catmint"}; List flowerList = Arrays.asList (kvety);

Od vrátenia Zoznam je pevná veľkosť Zoznam, nemôžeme pridávať / odstraňovať prvky.

Pokus o pridanie ďalších prvkov by spôsobil UnsupportedOperationException:

Reťazec [] kvety = {"Ageratum", "Allium", "Poppy", "Catmint"}; List flowerList = Arrays.asList (kvety); flowerList.add ("Celosia");

Koreň toho Výnimka je to, že vrátený objekt neimplementuje pridať () operácia, pretože to nie je to isté ako java.util.ArrayList.

Je to ArrayList, od java.util.Arrays.

Ďalším spôsobom, ako získať rovnakú výnimku, je pokus o odstránenie prvku zo získaného zoznamu.

Na druhej strane existujú spôsoby, ako získať premenlivý Zoznam pre prípad, že by sme to potrebovali.

Jedným z nich je vytvorenie ArrayList alebo akýkoľvek druh zoznamu priamo z výsledku asList ():

Reťazec [] kvety = {"Ageratum", "Allium", "Poppy", "Catmint"}; Zoznam flowerList = nový ArrayList (Arrays.asList (kvety));

3. Záver

Na záver je dôležité si uvedomiť, že pridanie ďalších prvkov do zoznamu môže byť problematické nielen pre nezmeniteľné zoznamy.

Celý zdrojový kód príkladov je ako vždy k dispozícii na serveri GitHub.


$config[zx-auto] not found$config[zx-overlay] not found