最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java使用Arrays.asList報UnsupportedOperationException的解決

 更新時間:2021年04月18日 10:41:55   作者:招招舟子  
這篇文章主要介紹了Java使用Arrays.asList報UnsupportedOperationException的解決,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

項目場景:

查詢多個名銷售的銷售業(yè)績,上層要求要在查詢銷售的業(yè)績同事也要查看到每年的年度銷售冠軍,于是前端傳遞的是以“,”分割開的字符串。測試的時候就報錯java.lang.UnsupportedOperationException的異常

代碼展示:

           // 這里隱藏了查詢條件,所以就寫死了
        List<String>  performId=new ArrayList<>();
        performId.add("701728881476112384");
        performId.add("701728881497083904");
        String[] agentIds = StringUtils.split(agentId, ",");
        List<String> agentIdList = Arrays.asList(agentIds);
        // 后面同事沒有注意,就直接展示查詢出來就加入
        agentIdList.addAll(performId);

原因分析:

于是我們查看了源碼,通過**Arrays.asList(T …a)**創(chuàng)建的 **return new ArrayList<>(a);**以為是java.util包下的,所以就對它增刪改了。查看源碼發(fā)現(xiàn),該方法并不支持增刪改 源碼如下:

 private static class ArrayList<E> extends AbstractList<E> implements RandomAccess, java.io.Serializable{
        private static final long serialVersionUID = -2764017481108945198L;
        private final E[] a;
        ArrayList(E[] array) {
            a = Objects.requireNonNull(array);
        }
        @Override
        public int size() {
            return a.length;
        }
        @Override
        public Object[] toArray() {
            return a.clone();
        }
        @Override
        @SuppressWarnings("unchecked")
        public <T> T[] toArray(T[] a) {
            int size = size();
            if (a.length < size)return Arrays.copyOf(this.a, size,(Class<? extends T[]>) a.getClass());
            System.arraycopy(this.a, 0, a, 0, size);
            if (a.length > size) a[size] = null;
            return a;
        }
        @Override
        public E get(int index) {
            return a[index];
        }
        @Override
        public E set(int index, E element) {
            E oldValue = a[index];
            a[index] = element;
            return oldValue;
        }

        @Override
        public int indexOf(Object o) {
            E[] a = this.a;
            if (o == null) {
                for (int i = 0; i < a.length; i++)
                    if (a[i] == null) return i;
            } else {
              for (int i = 0; i < a.length; i++)
                   if (o.equals(a[i])) return i;
            }
            return -1;
        
        @Override
        public boolean contains(Object o) {
            return indexOf(o) != -1;
        }
        @Override
        public Spliterator<E> spliterator() {
            return Spliterators.spliterator(a, Spliterator.ORDERED);
        }
        @Override
        public void forEach(Consumer<? super E> action) {
            Objects.requireNonNull(action);
            for (E e : a) {
                action.accept(e);
            }
        }
        @Override
        public void replaceAll(UnaryOperator<E> operator) {
            Objects.requireNonNull(operator);
            E[] a = this.a;
            for (int i = 0; i < a.length; i++) {
                a[i] = operator.apply(a[i]);
            }
        }

        @Override
        public void sort(Comparator<? super E> c) {
            Arrays.sort(a, c);
        }
    }

通過以上源碼發(fā)現(xiàn),Arrays內(nèi)部實現(xiàn)的ArrayList并未實現(xiàn)增刪改等的操作,繼承了 AbstractList.class 類中拋出的 UnsupportedOperationException異常。源碼如下:

    ##只粘貼了部分源碼,詳情可以去AbstractList.class中查看
    public void add(int index, E element) {
        throw new UnsupportedOperationException();
    }

總結(jié):

Arrays.asList(T .....a)不能進行增刪改等操作。在使用一下類的時候,看下源碼會避免一些代碼層的坑。

到此這篇關(guān)于Java使用Arrays.asList報UnsupportedOperationException的解決的文章就介紹到這了,更多相關(guān)Arrays.asList報UnsupportedOperationException內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解決mybatis使用char類型字段查詢oracle數(shù)據(jù)庫時結(jié)果返回null問題

    解決mybatis使用char類型字段查詢oracle數(shù)據(jù)庫時結(jié)果返回null問題

    這篇文章主要介紹了mybatis使用char類型字段查詢oracle數(shù)據(jù)庫時結(jié)果返回null問題的解決方法,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-06-06
  • classloader類加載器_基于java類的加載方式詳解

    classloader類加載器_基于java類的加載方式詳解

    下面小編就為大家?guī)硪黄猚lassloader類加載器_基于java類的加載方式詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • Spring一步到位精通攔截器

    Spring一步到位精通攔截器

    攔截器(Interceptor)是一種動態(tài)攔截方法調(diào)用的機制,在SpringMVC中動態(tài)攔截控制器方法的執(zhí)行。本文將詳細講講SpringMVC中攔截器的概念及入門案例,感興趣的可以嘗試一下
    2023-01-01
  • Java之SpringCloudAlibaba Sentinel組件案例講解

    Java之SpringCloudAlibaba Sentinel組件案例講解

    這篇文章主要介紹了Java之SpringCloudAlibaba Sentinel組件案例講解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • Spring?Boot?+?Mybatis?Plus實現(xiàn)樹狀菜單的方法

    Spring?Boot?+?Mybatis?Plus實現(xiàn)樹狀菜單的方法

    這篇文章主要介紹了Spring?Boot?+?Mybatis?Plus實現(xiàn)樹狀菜單,包括實體類中添加子菜單列表和集合及構(gòu)建菜單樹的詳細代碼,代碼簡單易懂,需要的朋友可以參考下
    2021-12-12
  • java 連接Redis的小例子

    java 連接Redis的小例子

    這篇文章介紹了java 連接Redis的小例子,有需要的朋友可以參考一下
    2013-09-09
  • 一文帶你掌握Spring Security框架的使用

    一文帶你掌握Spring Security框架的使用

    Spring Security是一款基于Spring框架的認證和授權(quán)框架,提供了一系列控制訪問和保護應(yīng)用程序的功能,本文將會對Spring Security框架進行全面詳細的講解,需要的可以參考下
    2023-05-05
  • MyBatis實現(xiàn)留言板的示例代碼

    MyBatis實現(xiàn)留言板的示例代碼

    本文主要介紹了MyBatis實現(xiàn)留言板的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • Java中Spring獲取bean方法小結(jié)

    Java中Spring獲取bean方法小結(jié)

    Spring是一個輕量級的控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器框架,如何在程序中獲取Spring配置的bean呢?下面通過本文給大家介紹Java中Spring獲取bean方法小結(jié),對spring獲取bean方法相關(guān)知識感興趣的朋友一起學(xué)習(xí)吧
    2016-01-01
  • Java System.currentTimeMillis()時間的單位轉(zhuǎn)換與計算方式案例詳解

    Java System.currentTimeMillis()時間的單位轉(zhuǎn)換與計算方式案例詳解

    這篇文章主要介紹了Java System.currentTimeMillis()時間的單位轉(zhuǎn)換與計算方式案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08

最新評論

酒泉市| 藁城市| 威信县| 乐安县| 通海县| 承德县| 霍邱县| 枣庄市| 柳江县| 延川县| 出国| 敖汉旗| 德清县| 永兴县| 商城县| 高唐县| 安乡县| 连州市| 陆河县| 玉山县| 林口县| 丰县| 辽宁省| 昂仁县| 巩义市| 明光市| 托克托县| 淳安县| 兰坪| 三穗县| 灵宝市| 定襄县| 和静县| 大英县| 闽清县| 澄迈县| 潜山县| 永福县| 枣强县| 英德市| 阿克陶县|