Java List UupportedOperationException

1. Oversigt

I denne hurtige vejledning diskuterer vi et fælles Undtagelse der kan opstå, når man arbejder med nogle af de fleste API'er Liste implementeringer - den Ikke-understøttetOperationException.

EN java.util.List har mere funktionalitet end en almindelig astråle kan støtte. For eksempel med kun et indbygget metodeopkald er det muligt at kontrollere, om et bestemt element er inde i strukturen. Det er typisk derfor, at vi nogle gange har brug for at konvertere en array til en Liste eller Kollektion.

For en introduktion til kernen Java Liste gennemførelse - ArrayList - se denne artikel.

2. Ikke-understøttetOperationException

En hyppig måde, hvorpå denne fejl opstår, er når vi bruger asList () metode fra java.util.Array:

offentlig statisk liste asList (T ... a)

Det vender tilbage:

  • en fast størrelse Liste fra størrelsen af ​​en given array
  • et element af samme type som originalen array og det skal være en Objekt
  • elementer i samme rækkefølgesom i original array
  • en liste, der er kan serieres og redskaber Tilfældig adgang

Da T er en varargs, vi kan videregive en matrix eller elementerne direkte som parametre, og metoden opretter en initialiseret liste med fast størrelse:

Liste blomster = Arrays.asList ("Ageratum", "Allium", "Poppy", "Catmint");

Vi kan også videregive en faktisk array:

Streng [] blomster = {"Ageratum", "Allium", "Valmue", "Catmint"}; List flowerList = Arrays.asList (blomster);

Siden den vendte tilbage Liste er en fast størrelse Liste, vi kan ikke tilføje / fjerne elementer.

Et forsøg på at tilføje flere elementer ville forårsage Ikke-understøttetOperationException:

Streng [] blomster = {"Ageratum", "Allium", "Valmue", "Catmint"}; List flowerList = Arrays.asList (blomster); flowerList.add ("Celosia");

Roden til dette Undtagelse er, at det returnerede objekt ikke implementerer tilføje() operation, da det ikke er det samme som java.util.ArrayList.

Det er en ArrayList, fra java.util.Arrays.

En anden måde at opnå den samme undtagelse er ved at prøve at fjerne et element fra den opnåede liste.

På den anden side er der måder at opnå en mutabel Liste hvis vi har brug for det.

En af dem er at skabe en ArrayList eller enhver form for liste direkte fra resultatet af asList ():

Streng [] blomster = {"Ageratum", "Allium", "Valmue", "Catmint"}; List flowerList = ny ArrayList (Arrays.asList (blomster));

3. Konklusion

Afslutningsvis er det vigtigt at forstå, at tilføjelse af flere elementer til en liste kan være problematisk for mere end bare uforanderlige lister.

Som altid er den fulde kildekode for eksemplerne tilgængelig på GitHub.


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