美文网首页
Arrays.asList().add()抛unSuppostO

Arrays.asList().add()抛unSuppostO

作者: 进击的波仔 | 来源:发表于2019-11-04 17:15 被阅读0次

    最近在使用数组转集合时,需要对集合进行操作,发现一个问题,大概是这样的:

        @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()怎么实现的,代码如下:

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

    new ArrayList<> 没毛病嘛!但当我点进去一看:

    原来这个ArrayList并不是我们熟知的那个ArrayList,而是Arrays的一个内部类,它仅仅继承了AbstractList抽象类并重写了部分方法而已,当然,这部分方法并不包括add(),所以当我们调用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,这样就搞定了

    相关文章

      网友评论

          本文标题:Arrays.asList().add()抛unSuppostO

          本文链接:https://www.haomeiwen.com/subject/vybdbctx.html