Java List UnupportedOperationException

1. Oversikt

I denne raske opplæringen vil vi diskutere en felles Unntak som kan oppstå når du arbeider med noen API-er for de fleste Liste implementeringer - den Ikke-støttetOperationException.

EN java.util.Liste har mer funksjonalitet enn en vanlig astråle kan støtte. For eksempel, med bare en innebygd metodeanrop, er det mulig å sjekke om et bestemt element er inne i strukturen. Det er vanligvis derfor vi noen ganger trenger å konvertere en array til en Liste eller Samling.

For en introduksjon til kjernen Java Liste implementering - ArrayList - referer til denne artikkelen.

2. Ikke-støttetOperationException

En hyppig måte som denne feilen oppstår er når vi bruker asListe () metode fra java.util.Arrayer:

offentlig statisk liste asList (T ... a)

Den returnerer:

  • en fast størrelse Liste fra størrelsen på et gitt array
  • et element av samme type som originalen array og det må være en Gjenstand
  • elementer i samme rekkefølgesom i original array
  • en liste som er kan serieiseres og redskaper Tilfeldig tilgang

Siden T er en varargs, kan vi sende en matrise eller elementene direkte som parametere, og metoden vil opprette en initialisert liste med fast størrelse:

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

Vi kan også passere en faktisk array:

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

Siden returnerte Liste er en fast størrelse Liste, kan vi ikke legge til / fjerne elementer.

Et forsøk på å legge til flere elementer ville forårsake Ikke-støttetOperationException:

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

Roten til dette Unntak er at det returnerte objektet ikke implementerer legge til() operasjon siden det ikke er det samme som java.util.ArrayList.

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

En annen måte å oppnå samme unntak på er å prøve å fjerne et element fra den oppnådde listen.

På den annen side er det måter å oppnå en mutabel Liste i tilfelle vi trenger det.

En av dem er å lage en ArrayList eller noen form for liste direkte fra resultatet av asListe ():

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

3. Konklusjon

Avslutningsvis er det viktig å forstå at å legge til flere elementer på en liste kan være problematisk for mer enn bare uforanderlige lister.

Som alltid er hele kildekoden til eksemplene tilgjengelig på GitHub.


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