zoukankan      html  css  js  c++  java
  • java.lang.UnsupportedOperationException

    如图所示,list元素类型与obj的类型一致,但是list.add时会抛出异常:

    Method threw 'java.lang.UnsupportedOperationException' exception.

    原因是:此时的list 是通过Arrays.asList得到的,是有数组转换的,以下是简单代码重现bug:

    @Test
        public void test6() {
            String[] arr = {"a", "b"};
            List<String> list = Arrays.asList(arr);
            list.add("c");
        }

    部分异常信息如下(抛出同样的错):

    java.lang.UnsupportedOperationException
        at java.util.AbstractList.add(AbstractList.java:148)
        at java.util.AbstractList.add(AbstractList.java:108)

    原因在于:

    使用Arrays.asList返回的是Arrays的内部类ArrayList,该内部类也继承了AbstractList

    明显,Arrays 的内部类 ArrayList 没有实现 add, remove 等方法,所以会抛出异常

     

    为了解决这个问题,只需要将 Arrays. asList(xxx) 强转为 java.util.ArrayList 就行,如下所示:

    @Test
        public void test6() {
            String[] arr = {"a", "b"};
            List<String> list = new ArrayList<>(Arrays.asList(arr));
            list.add("c");
        }

    该 ArrayList 类就是日常使用的,同样继承了 AbstractList,且实现了很丰富的方法:

  • 相关阅读:
    C语言I博客作业07
    C语言I博客作业06
    C语言I博客作业05
    C语言|博客作业04
    C语言|博客作业02
    第二周作业
    第一周作业
    学期总结
    作业01
    C语言I博客作业09
  • 原文地址:https://www.cnblogs.com/miaoying/p/11912114.html
Copyright © 2011-2022 走看看