2012-04-08 24 views
16

Ésta objeto de lista me está mordiendo en el culo ..No puedo agregar un elemento a una lista? UnsupportedOperationException

Cada vez que intento agregar un elemento a la misma, se produce esto:

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

La línea que produce el error es insignificante, pero aquí está de todos modos:

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

¿Debo tener acceso no estático?

declaración real de la variable:

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

¿Alguna idea? No puedo encontrar nada en Google que valga la pena.

+1

Por favor, muéstrenos la declaración para 'AdventureLobbies.players'. –

+2

I second @ KirkWoll's suggestion. No me sorprendería si 'AdventureLobbies.players' es una lista inmutable, que podría haber sido devuelta de [Collections.unmodifiableList] (http://docs.oracle.com/javase/6/docs/api/java/util /Collections.html#unmodifiableList(java.util.List) u otro método que logre lo mismo. –

+0

Estoy de acuerdo con los dos comentarios anteriores: sin que sepamos el tipo de objeto (por eso necesitamos ver la declaración, o la llamada al método donde obtuvo esta lista), es difícil saber por qué exactamente esto está sucediendo, aunque la lista sea inmutable es una buena conjetura educada. – jefflunt

Respuesta

37

Arrays.asList() le devolverá una lista no modificable, y es por eso que su complemento está fallando. Trate de crear la lista con:

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

Los documentos java dicen asList @SafeVarargs public static <T> List<T> asList(T... a) "devuelve una lista de tamaño fijo respaldado por la matriz especificada"

Su lista es de tamaño fijo, lo que significa que no puede crezca o se encoja y así cuando llame a add, arroja una excepción de operación no admitida

0

Esta excepción está muy familiarizada con el acceso a objetos que no permitirán el acceso de acuerdo a las reglas de lenguaje java como acceder a objetos inmutables, por lo tanto crear una instancia de la siguiente manera:

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