2012-04-08 79 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'的聲明。 – 2012-04-08 00:07:38

+2

我第二@ KirkWoll的建議。我也不會感到驚訝,如果'AdventureLobbies.players'是不可變的列表,這可能已從[Collections.unmodifiableList(http://docs.oracle.com/javase/6/docs/api/java/util返回/Collections.html#unmodifiableList(java.util.List))或另一種完成相同事情的方法。 – 2012-04-08 00:10:18

+0

同意雙方先前的評論 - 沒有我們知道的對象(所以爲什麼我們需要看到的聲明,或者你得到這個列表的方法調用)的類型,很難知道到底爲什麼,爲什麼發生這種情況,雖然不可變列表是一個很好的教育猜測。 – jefflunt 2012-04-08 00:12:07

回答

37

Arrays.asList()會給你回一個不可修改的列表,這就是爲什麼你的附加失敗。嘗試創建列表:

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

的Java文檔說 asList @SafeVarargs public static <T> List<T> asList(T... a) 「返回由指定數組支持的固定大小的列表」

你的列表是固定的大小,這意味着它不能擴大或縮小,所以當你調用add,它拋出一個不支持的操作異常

0

這個例外是非常熟悉的訪問對象,這將不會允許根據訪問到像訪問不可變對象的java語言規則,因此用下面的方式實例化它:

AdventureLobbies.players = new ArrayList(Arrays. 
asList(rs.getString("players").toLowerCase().split(","))); // Perfectly done 
相關問題