2012-04-08 3 views
16
이 하나의 목록 객체가 엉덩이에서 나를 물고

..목록에 요소를 추가 할 수 없습니까? UnsupportedOperationException를

나는 그것에 요소를 추가하려고 할 때마다, 그것은 생산이 :

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

오류를 생산 라인은 미미하지만, 여기 어쨌든입니다 :

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

정적으로 액세스해야합니까? 변수의

실제 선언 :

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

어떤 아이디어? Google에서 가치있는 것을 찾을 수 없습니다.

+1

'AdventureLobbies.players'에 대한 선언을 알려주십시오. –

+2

KirkWoll 님의 제안이 두 번째입니다. AdventureLobbies.players'가 [Collections.unmodifiableList] (http://docs.oracle.com/javase/6/docs/api/java/util)에서 반환 된 불변 목록 일 경우 나는 놀랄 것입니다. /Collections.html#unmodifiableList (java.util.List)) 또는 동일한 작업을 수행하는 다른 방법을 사용하십시오. –

+0

우리가 객체의 유형을 알지 못해서 (따라서 왜 우리가 선언을보아야하는지, 또는이 목록을 얻은 곳에서 메소드를 호출해야하는지) 알지 못하는데 왜 이것이 일어나는지 정확히 알기는 어렵다. 좋은 교양있는 추측이다. – jefflunt

답변

37

Arrays.asList()는 수정할 수없는 목록을 돌려 주므로 추가가 실패한 것입니다.

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

자바 문서는 asList @SafeVarargs public static <T> List<T> asList(T... a) 말을 의미

귀하의 목록, 고정 된 크기이다 "지정된 배열에 연동하는 고정 사이즈의리스트를 돌려줍니다"할 수 없습니다와 함께 목록을 만들어보십시오 증가 또는 축소되므로 add를 호출하면 지원되지 않는 작업 예외가 throw됩니다.

0

이 예외는 액세스를 허용하지 않는 개체에 매우 익숙합니다. Java 언어 규칙에 따라 변경 불가능한 객체에 액세스하는 것과 같은 이유로 다음과 같은 방법으로 인스턴스화하십시오.

AdventureLobbies.players = new ArrayList(Arrays. 
asList(rs.getString("players").toLowerCase().split(","))); // Perfectly done 
관련 문제