Arrays.asList().add()拋unSuppostOption異常原理分析

最近在使用數組轉集合時,須要對集合進行操做,發現一個問題,大概是這樣的:java

@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()怎麼實現的,代碼以下:post

@SafeVarargs @SuppressWarnings("varargs") public static List asList(T... a) { return new ArrayList<>(a); }spa

new ArrayList<> 沒毛病嘛!但當我點進去一看:3d

原來這個ArrayList並非咱們熟知的那個ArrayList,而是Arrays的一個內部類,它僅僅繼承了AbstractList抽象類並重寫了部分方法而已,固然,這部分方法並不包括add(),因此當咱們調用add()時,會直接拋出unSuppostOption異常也就解釋的通了! 爲了解決這個問題,咱們能夠經過new咱們要的那個ArrayList來解決,對,就是你想的那個:code

@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,這樣就搞定了cdn

相關文章
相關標籤/搜索