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

Java使用Arrays.asList報(bào)UnsupportedOperationException的解決

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

項(xiàng)目場(chǎng)景:

查詢(xún)多個(gè)名銷(xiāo)售的銷(xiāo)售業(yè)績(jī),上層要求要在查詢(xún)銷(xiāo)售的業(yè)績(jī)同事也要查看到每年的年度銷(xiāo)售冠軍,于是前端傳遞的是以“,”分割開(kāi)的字符串。測(cè)試的時(shí)候就報(bào)錯(cuò)java.lang.UnsupportedOperationException的異常

代碼展示:

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

原因分析:

于是我們查看了源碼,通過(guò)**Arrays.asList(T …a)**創(chuàng)建的 **return new ArrayList<>(a);**以為是java.util包下的,所以就對(duì)它增刪改了。查看源碼發(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);
        }
    }

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

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

總結(jié):

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

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

相關(guān)文章

  • 解決mybatis使用char類(lèi)型字段查詢(xún)oracle數(shù)據(jù)庫(kù)時(shí)結(jié)果返回null問(wèn)題

    解決mybatis使用char類(lèi)型字段查詢(xún)oracle數(shù)據(jù)庫(kù)時(shí)結(jié)果返回null問(wèn)題

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

    classloader類(lèi)加載器_基于java類(lèi)的加載方式詳解

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

    Spring一步到位精通攔截器

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

    Java之SpringCloudAlibaba Sentinel組件案例講解

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

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

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

    java 連接Redis的小例子

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

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

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

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

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

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

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

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

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

最新評(píng)論

株洲市| 云和县| 抚顺县| 巫溪县| 榕江县| 乌什县| 青海省| 霍林郭勒市| 北辰区| 雷山县| 渑池县| 巴马| 沙雅县| 广平县| 金溪县| 信宜市| 嘉定区| 永嘉县| 五莲县| 安阳市| 灌云县| 德江县| 甘德县| 屏山县| 运城市| 沁源县| 湾仔区| 曲阜市| 东莞市| 延长县| 梓潼县| 离岛区| 都江堰市| 宜川县| 普陀区| 绩溪县| 东海县| 洞口县| 和龙市| 敦化市| 巴中市|