Java-lijst UnsupportedOperationException

1. Overzicht

In deze korte tutorial bespreken we een veelvoorkomende Uitzondering dat kan gebeuren bij het werken met enkele van de API's van de meeste Lijst implementaties - de UnsupportedOperationException.

EEN java.util.List heeft meer functionaliteit dan een gewone array kan ondersteunen. Met slechts één ingebouwde methodeaanroep is het bijvoorbeeld mogelijk om te controleren of een specifiek element zich binnen de structuur bevindt. Dat is meestal de reden waarom we soms een array naar een Lijst of Verzameling.

Voor een inleiding tot de kern van Java Lijst implementatie - het ArrayList - raadpleeg dit artikel.

2. UnsupportedOperationException

Een veel voorkomende manier waarop deze fout optreedt, is wanneer we asList () methode van java.util.Arrays:

openbare statische lijst asList (T ... a)

Het geeft als resultaat:

  • een vaste maat Lijst vanaf de grootte van een gegeven array
  • een element van hetzelfde type als het origineel array en het moet een Voorwerp
  • elementen in dezelfde volgordezoals in de originele array
  • een lijst dat is serialiseerbaar en werktuigen Willekeurige toegang

Omdat T een varargskunnen we een array of de items rechtstreeks als parameters doorgeven, en de methode zal een geïnitialiseerde lijst met vaste grootte maken:

Lijst bloemen = Arrays.asList ("Ageratum", "Allium", "Poppy", "Catmint");

We kunnen ook een actueel doorgeven array:

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

Sinds de terugkeer Lijst is een vaste maat Lijst, kunnen we geen elementen toevoegen / verwijderen.

Een poging om meer elementen toe te voegen, zou leiden tot UnsupportedOperationException:

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

De wortel hiervan Uitzondering is dat het geretourneerde object de toevoegen() operatie omdat het niet hetzelfde is als java.util.ArrayList.

Het is een ArrayList, van java.util.Arrays.

Een andere manier om dezelfde uitzondering te verkrijgen, is door te proberen een element uit de verkregen lijst te verwijderen.

Aan de andere kant zijn er manieren om een ​​veranderlijk te verkrijgen Lijst voor het geval we het nodig hebben.

Een daarvan is om een ArrayList of een willekeurige lijst rechtstreeks uit het resultaat van asList ():

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

3. Conclusie

Kortom, het is belangrijk om te begrijpen dat het toevoegen van meer elementen aan een lijst problematisch kan zijn voor meer dan alleen onveranderlijke lijsten.

Zoals altijd is de volledige broncode van de voorbeelden beschikbaar op GitHub.