欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java使用Arrays.asList報UnsupportedOperationException的解決

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

項目場景:

查詢多個名銷售的銷售業(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ā)現,該方法并不支持增刪改 源碼如下:

 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ā)現,Arrays內部實現的ArrayList并未實現增刪改等的操作,繼承了 AbstractList.class 類中拋出的 UnsupportedOperationException異常。源碼如下:

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

總結:

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

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

相關文章

  • Spring?Cloud實現灰度發(fā)布的示例代碼

    Spring?Cloud實現灰度發(fā)布的示例代碼

    這篇文章主要為大家詳細介紹了Spring?Cloud實現灰度發(fā)布的相關知識,文中的示例代碼講解詳細,具有一定的學習價值,感興趣的小伙伴可以了解一下
    2023-09-09
  • JVM中如何做到STW使程序暫停

    JVM中如何做到STW使程序暫停

    STW,即Stop The World,這篇文章來為大家詳細介紹了JVM中是如何做到STW使程序暫停的原理分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-01-01
  • 你還在用Synchronized?Atomic你了解不?

    你還在用Synchronized?Atomic你了解不?

    這篇文章主要介紹了你還在用Synchronized?Atomic你了解不? 文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-12-12
  • 詳解Spring依賴注入:@Autowired,@Resource和@Inject區(qū)別與實現原理

    詳解Spring依賴注入:@Autowired,@Resource和@Inject區(qū)別與實現原理

    這篇文章主要介紹了詳解Spring依賴注入:@Autowired,@Resource和@Inject區(qū)別與實現原理,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-06-06
  • 使用ResponseEntity作為的返回值的應用

    使用ResponseEntity作為的返回值的應用

    這篇文章主要介紹了使用ResponseEntity作為的返回值的應用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Java的String類中的startsWith方法和endsWith方法示例詳解

    Java的String類中的startsWith方法和endsWith方法示例詳解

    大家應該都知道startsWith()方法用于檢測字符串是否以指定的前綴開始,endsWith()方法用于測試字符串是否以指定的后綴結束,本文就Java的String類中的startsWith方法和endsWith方法給大家詳細講解,感興趣的朋友一起看看吧
    2023-11-11
  • Java由淺入深學習數組的使用

    Java由淺入深學習數組的使用

    數組對于每一門編程語言來說都是重要的數據結構之一,當然不同語言對數組的實現及處理也不盡相同。Java?語言中提供的數組是用來存儲固定大小的同類型元素
    2022-05-05
  • 初步解析Java中AffineTransform類的使用

    初步解析Java中AffineTransform類的使用

    這篇文章主要介紹了Java中AffineTransform類的使用,AffineTransform類經常被用來處理圖片,需要的朋友可以參考下
    2015-10-10
  • Java中IO流 字節(jié)流實例詳解

    Java中IO流 字節(jié)流實例詳解

    這篇文章主要介紹了Java中IO流 字節(jié)流實例詳解的相關資料,需要的朋友可以參考下
    2017-05-05
  • Java編程實現對象克?。◤椭疲┐a詳解

    Java編程實現對象克?。◤椭疲┐a詳解

    這篇文章主要介紹了Java編程實現對象克?。◤椭疲┐a詳解,涉及了克隆的原因,如何實現克隆,克隆的一般步驟,深克隆與淺克隆的介紹等相關內容,具有一定借鑒價值,需要的朋友可以參考下。
    2017-11-11

最新評論