最近在使用數(shù)組轉(zhuǎn)集合時扳肛,需要對集合進行操作傻挂,發(fā)現(xiàn)一個問題,大概是這樣的:
@Test
public void arrayTest(){
String[] ids = new String[]{"1","2"};
List<String> idList = Arrays.asList(ids);
//我需要在這里操作這個集合
idList.add("3");
System.out.println(idList);
}
看起來似乎沒什么問題挖息,僅僅往list里面加了一項金拒,不過分吧!但是套腹,在我運行時卻是這樣的:
shit! 怎么和我想的完全不一樣呢殖蚕?java.lang.UnsupportedOperationException
是個啥情況轿衔?沒辦法,只有去看一哈Arrays.asList()怎么實現(xiàn)的睦疫,代碼如下:
@SafeVarargs
@SuppressWarnings("varargs")
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
new ArrayList<> 沒毛病嘛害驹!但當我點進去一看:
原來這個ArrayList并不是我們熟知的那個ArrayList,而是Arrays的一個內(nèi)部類蛤育,它僅僅繼承了AbstractList抽象類并重寫了部分方法而已
宛官,當然,這部分方法并不包括add()瓦糕,所以當我們調(diào)用add()時底洗,會直接拋出unSuppostOption異常也就解釋的通了!
為了解決這個問題咕娄,我們可以通過new我們要的那個ArrayList來解決亥揖,對,就是你想的那個:
@Test
public void arrayTest(){
String[] ids = new String[]{"1","2","3"};
List<String> idList = new ArrayList<>(Arrays.asList(ids));
//我需要在這里操作這個集合
idList.add("3");
System.out.println(idList);
}
OK,這樣就搞定了