Java lista UnsupportedOperationException

1. Áttekintés

Ebben a gyors bemutatóban egy közöset fogunk megvitatni Kivétel ami akkor fordulhat elő, ha a legtöbb API-val dolgozik Lista megvalósítások - a UnsupportedOperationException.

A java.util.List több funkcionalitással rendelkezik, mint egy közönséges array támogatni tudja. Például csak egy beépített metódushívással ellenőrizhető, hogy egy adott elem van-e a struktúrán belül. Általában ezért kell néha átalakítanunk egy sor a Lista vagy Gyűjtemény.

Bevezetés az alapvető Java-ba Lista végrehajtás - a Tömb lista - kérjük, olvassa el ezt a cikket.

2. UnsupportedOperationException

Ez a hiba gyakran előfordul, amikor használjuk asList () módszer től java.util.A Arrays:

public static List asList (T ... a)

Visszaadja:

  • fix méretű Lista mint egy adott méret sor
  • az eredetivel megegyező típusú elem sor és annak egy Tárgy
  • elemek ugyanabban a sorrendbenmint az eredeti tömbben
  • egy lista, ami sorosítható és megvalósítja RandomAccess

Mivel T a varargs, közvetlenül átadhatunk egy tömböt vagy elemeket paraméterként, és a módszer rögzített méretű inicializált listát hoz létre:

Viráglista = Arrays.asList ("Ageratum", "Allium", "Poppy", "Catmint");

Aktuálisat is átadhatunk sor:

Karakterlánc [] virág = {"Ageratum", "Allium", "Poppy", "Catmint"}; List flowerList = tömbök.asList (virágok);

Amióta visszatért Lista fix méretű Lista, nem adhatunk hozzá / távolíthatunk el elemeket.

Kísérlet további elemek hozzáadására okozhat UnsupportedOperationException:

Karakterlánc [] virág = {"Ageratum", "Allium", "Poppy", "Catmint"}; List flowerList = tömbök.asList (virágok); flowerList.add ("Celosia");

Ennek gyökere Kivétel az, hogy a visszaküldött objektum nem valósítja meg a add () művelet, mivel nem ugyanaz, mint a java.util.ArrayList.

Ez egy Tömb lista, tól től java.util.A Arrays.

Egy másik lehetőség ugyanannak a kivételnek az megszerzésével, ha megpróbál eltávolítani egy elemet a kapott listáról.

Másrészről vannak módok a módosítható megszerzésére Lista arra az esetre, ha szükségünk lenne rá.

Egyikük egy Tömb lista vagy bármilyen listát közvetlenül a asList ():

Karakterlánc [] virág = {"Ageratum", "Allium", "Poppy", "Catmint"}; List flowerList = új ArrayList (Arrays.asList (virágok));

3. Következtetés

Összegzésképpen fontos megérteni, hogy több elem hozzáadása egy listához nemcsak változhatatlan listák esetén okozhat problémát.

Mint mindig, a példák teljes forráskódja elérhető a GitHubon.