天天看點

Arrays.asList()抛錯:UnsupportOperationException

場景:

Arrays.asList();後調用List的add/remove 方法會抛出UnsupportOperationException異常。

//定義一個字元長度為5的字元串
String[] strings = new String[5];
strings[0] = "a";
strings[1] = "b";
strings[2] = "c";
strings[3] = "d";
strings[4] = "e";

//調用Arrays中的asList方法将String[]轉化為List<String>
List<String> list = Arrays.asList(strings);
System.out.println("list<String>:"+list.toString());

//為list添加一個元素,會報錯UnsupportOperationException
list.add("f");
System.out.println("list<String>:"+list.toString());
           

原因:

我們來看一下Arrays.aslist()方法的實作原理,先看此方法的代碼:

public static <T> List<T> asList(T... a) {
    return new ArrayList<>(a);
}
           

傳回的ArrayList類是工具類的一個靜态私有内部類,類的方法包括以下這些:

Arrays.asList()抛錯:UnsupportOperationException

Arrays.aslist中,看代碼可以看到這裡傳回的ArrayList不是原來的傳統意義上的java.util.arraylist了,而是自己工具類的一個靜态私有内部類,并沒有提供add方法,要自己實作,是以這裡是出錯了。

是以,除非确信array.aslist後長度不會增加,否則謹慎使用:List abc=Arrays.asList(“a”,“b”,“c”),因為這樣的長度是無法再add的了。

解決方案:

繼續閱讀