2012-04-08 17 views
16

Ta lista obiektów gryzie mnie w tyłek ..Nie mogę dodać elementu do listy? UnsupportedOperationException

Za każdym razem staram się dodać element do niego, to daje to:

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

Linia produkcji błędu jest niewielki, ale tutaj to jest tak:

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

Czy nie powinienem mieć do niego dostępu statycznie?

Rzeczywista deklaracja zmiennej:

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

Jakieś pomysły? Nie można znaleźć niczego w Google, które warto.

+1

Pokaż nam deklarację dla "AdventureLobbies.players". –

+2

I sekunda sugestii KirkWoll. Nie zdziwiłbym się, gdyby "AdventureLobbies.player" był niezmienną listą, która mogłaby zostać zwrócona z [Collections.unmodifiableList] (http://docs.oracle.com/javase/6/docs/api/java/util /Collections.html#unmodifiableList(java.util.List) lub innej metody, która realizuje to samo. –

+0

Uzgodniono z obydwoma wcześniejszymi komentarzami - bez znajomości rodzaju obiektu (stąd, dlaczego potrzebujemy zobaczyć deklarację lub wywołanie metody, skąd masz tę listę), trudno jest wiedzieć, dlaczego dokładnie tak się dzieje, choć lista niezmienna jest dobrze wykształconym domysłem. – jefflunt

Odpowiedz

37

Funkcja Arrays.asList() zwróci listę niemodyfikowalną, dlatego dodanie pliku kończy się niepowodzeniem. Spróbuj utworzyć listę z:

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

Docs java powiedzieć asList @SafeVarargs public static <T> List<T> asList(T... a) „zwraca listę stałym rozmiarze poparte określonej tablicy”

Twoja lista jest stałym rozmiarze, co oznacza, że ​​nie może rosną lub zmniejszają się, a więc po wywołaniu add, rzuca nieobsługiwany wyjątek operacji.

0

Ten wyjątek jest bardzo znany z dostępu do obiektów, które nie pozwalają na dostęp zgodnie z do reguł języka java, takich jak dostęp do niezmiennych obiektów, dlatego należy utworzyć instancję w następujący sposób:

AdventureLobbies.players = new ArrayList(Arrays. 
asList(rs.getString("players").toLowerCase().split(","))); // Perfectly done 
Powiązane problemy