Elenco Java UnsupportedOperationException

1. Panoramica

In questo breve tutorial, discuteremo di un'eccezione comune che può verificarsi quando si lavora con alcune API della maggior parte delle implementazioni di List : l' UnsupportedOperationException .

Un java.util.List ha più funzionalità di quante ne possa supportare un normale rray . Ad esempio, con una sola chiamata al metodo incorporata, è possibile verificare se un elemento specifico è all'interno della struttura. Questo è in genere il motivo per cui a volte è necessario convertire un array in un elenco o in una raccolta .

Per un'introduzione all'implementazione principale dell'elenco Java, ArrayList , fare riferimento a questo articolo.

2. UnsupportedOperationException

Un modo frequente in cui si verifica questo errore è quando usiamo il metodo asList () da java.util.Arrays:

public static List asList(T... a)

Ritorna:

  • un elenco a dimensione fissa a partire dalle dimensioni di un dato array
  • un elemento dello stesso tipo di quello nell'array originale e deve essere un Object
  • elementi nello stesso ordinecome nell'array originale
  • un elenco che è serializzabile e implementa RandomAccess

Poiché T è un varargs , possiamo passare un array o gli elementi direttamente come parametri e il metodo creerà un elenco inizializzato a dimensione fissa:

List flowers = Arrays.asList("Ageratum", "Allium", "Poppy", "Catmint");

Possiamo anche passare un array effettivo :

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

Poiché l' elenco restituito è un elenco di dimensioni fisse , non è possibile aggiungere / rimuovere elementi .

Un tentativo di aggiungere più elementi causerebbe UnsupportedOperationException :

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

La radice di questa eccezione è che l'oggetto restituito non implementa l' operazione add () poiché non è lo stesso di java.util.ArrayList.

È un ArrayList , da java.util.Arrays.

Un altro modo per ottenere la stessa eccezione è provare a rimuovere un elemento dall'elenco ottenuto.

D'altra parte, ci sono modi per ottenere una lista modificabile nel caso in cui ne abbiamo bisogno.

Uno di questi è creare un ArrayList o qualsiasi tipo di elenco direttamente dal risultato di asList () :

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

3. Conclusione

In conclusione, è importante capire che l'aggiunta di più elementi a un elenco può essere problematico per più di semplici elenchi immutabili.

Come sempre, il codice sorgente completo degli esempi è disponibile su GitHub.