2012-04-08 22 views
16

Questo oggetto lista mi sta mordendo nel culo ..Non riesco ad aggiungere un elemento a un elenco? UnsupportedOperationException

Ogni volta che cerco di aggiungere un elemento ad esso, si produce questo:

Caused by: java.lang.UnsupportedOperationException 
     at java.util.AbstractList.add(AbstractList.java:148) 
     at java.util.AbstractList.add(AbstractList.java:108) 

La linea di produzione l'errore è insignificante, ma eccolo:

AdventureLobbies.players.add(args[0].toLowerCase()); 

Non dovrei accedervi in ​​modo statico?

dichiarazione effettiva di variabili:

AdventureLobbies.players = Arrays.asList(rs.getString("players").toLowerCase().split(","));

Tutte le idee? Non riesci a trovare nulla su Google che valga la pena.

+1

Per favore mostraci la dichiarazione per 'AdventureLobbies.players'. –

+2

I secondo suggerimento di KirkWoll. Non sarei sorpreso se 'AdventureLobbies.players' fosse un elenco immutabile, che potrebbe essere stato restituito da [Collections.unmodifiableList] (http://docs.oracle.com/javase/6/docs/api/java/util /Collections.html#unmodifiableList(java.util.List)) o un altro metodo che realizza la stessa cosa. –

+0

Concordato con entrambi i commenti precedenti - senza che noi conosciamo il tipo di oggetto (quindi perché abbiamo bisogno di vedere la dichiarazione, o la chiamata al metodo in cui hai ottenuto questa lista), è difficile sapere perché esattamente questo sta accadendo, anche se lista immutabile è un'ipotesi educata. – jefflunt

risposta

37

Arrays.asList() restituirà un elenco non modificabile ed è per questo che l'aggiunta non riesce. Prova a creare l'elenco con:

AdventureLobbies.players = new ArrayList(Arrays.asList(rs.getString("players").toLowerCase().split(","))); 
5

La documentazione java dicono asList @SafeVarargs public static <T> List<T> asList(T... a) "restituisce un elenco di dimensioni fisse sostenuta dalla matrice specificata"

L'elenco è dimensione fissa, il che significa che non può crescono o si riducono e quindi quando si chiama add, si genera un'eccezione operazione non supportata

0

Questa eccezione è molto familiare con l'accesso agli oggetti che non consentono l'accesso in base alle regole del linguaggio java come l'accesso a oggetti immutabili, per questo motivo invece di istanziarlo nel seguente modo:

AdventureLobbies.players = new ArrayList(Arrays. 
asList(rs.getString("players").toLowerCase().split(","))); // Perfectly done 
Problemi correlati