java.lang.UnsupportedOperationException解决方法

前言:

在工作中我们会经常操作集合,有的时候会碰到程序抛出标题中提到的异常,这个翻译过来就很好理解,不支持操作的异常。但是你会很纳闷,明明自己操作的是集合的add方法,难道集合还不支持追加元素了?

那是因为此集合非彼集合。

正文:

我们还是先复现问题,在分析问题,最后解决问题。

1.复现问题

public class Demo34 {
    public static void main(String[] args) {
        String[] array = {"1","2","3","4","5"};
        List<String> list = Arrays.asList(array);
        list.add("6");
    }
}

运行结果:

"C:\Program Files\Java\jdk1.8.0_101\bin\java.exe" "-javaagent:D:\idea\IntelliJ IDEA 2019.2.3\lib\idea_rt.jar=58871:D:\idea\IntelliJ IDEA 2019.2.3\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_101\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\rt.jar;F:\tower\springboot_jsp\target\classes;G:\repo\org\springframework\boot\spring-boot-starter\2.1.1.RELEASE\spring-boot-starter-2.1.1.RELEASE.jar;G:\repo\org\springframework\boot\spring-boot\2.1.1.RELEASE\spring-boot-2.1.1.RELEASE.jar;G:\repo\org\springframework\spring-context\5.1.3.RELEASE\spring-context-5.1.3.RELEASE.jar;G:\repo\org\springframework\boot\spring-boot-autoconfigure\2.1.1.RELEASE\spring-boot-autoconfigure-2.1.1.RELEASE.jar;G:\repo\org\springframework\boot\spring-boot-starter-logging\2.1.1.RELEASE\spring-boot-starter-logging-2.1.1.RELEASE.jar;G:\repo\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;G:\repo\org\apache\logging\log4j\log4j-to-slf4j\2.11.1\log4j-to-slf4j-2.11.1.jar;G:\repo\org\apache\logging\log4j\log4j-api\2.11.1\log4j-api-2.11.1.jar;G:\repo\org\slf4j\jul-to-slf4j\1.7.25\jul-to-slf4j-1.7.25.jar;G:\repo\javax\annotation\javax.annotation-api\1.3.2\javax.annotation-api-1.3.2.jar;G:\repo\org\springframework\spring-core\5.1.3.RELEASE\spring-core-5.1.3.RELEASE.jar;G:\repo\org\springframework\spring-jcl\5.1.3.RELEASE\spring-jcl-5.1.3.RELEASE.jar;G:\repo\org\yaml\snakeyaml\1.23\snakeyaml-1.23.jar;G:\repo\org\springframework\boot\spring-boot-starter-web\2.4.2\spring-boot-starter-web-2.4.2.jar;G:\repo\org\springframework\boot\spring-boot-starter-json\2.1.1.RELEASE\spring-boot-starter-json-2.1.1.RELEASE.jar;G:\repo\com\fasterxml\jackson\core\jackson-databind\2.9.7\jackson-databind-2.9.7.jar;G:\repo\com\fasterxml\jackson\core\jackson-annotations\2.9.0\jackson-annotations-2.9.0.jar;G:\repo\com\fasterxml\jackson\core\jackson-core\2.9.7\jackson-core-2.9.7.jar;G:\repo\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.9.7\jackson-datatype-jdk8-2.9.7.jar;G:\repo\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.9.7\jackson-datatype-jsr310-2.9.7.jar;G:\repo\com\fasterxml\jackson\module\jackson-module-parameter-names\2.9.7\jackson-module-parameter-names-2.9.7.jar;G:\repo\org\springframework\boot\spring-boot-starter-tomcat\2.1.1.RELEASE\spring-boot-starter-tomcat-2.1.1.RELEASE.jar;G:\repo\org\apache\tomcat\embed\tomcat-embed-core\9.0.13\tomcat-embed-core-9.0.13.jar;G:\repo\org\apache\tomcat\embed\tomcat-embed-el\9.0.13\tomcat-embed-el-9.0.13.jar;G:\repo\org\apache\tomcat\embed\tomcat-embed-websocket\9.0.13\tomcat-embed-websocket-9.0.13.jar;G:\repo\org\springframework\spring-web\5.1.3.RELEASE\spring-web-5.1.3.RELEASE.jar;G:\repo\org\springframework\spring-beans\5.1.3.RELEASE\spring-beans-5.1.3.RELEASE.jar;G:\repo\org\springframework\spring-webmvc\5.1.3.RELEASE\spring-webmvc-5.1.3.RELEASE.jar;G:\repo\org\springframework\spring-aop\5.1.3.RELEASE\spring-aop-5.1.3.RELEASE.jar;G:\repo\org\springframework\spring-expression\5.1.3.RELEASE\spring-expression-5.1.3.RELEASE.jar;G:\repo\com\baomidou\mybatis-plus-boot-starter\3.1.0\mybatis-plus-boot-starter-3.1.0.jar;G:\repo\com\baomidou\mybatis-plus\3.1.0\mybatis-plus-3.1.0.jar;G:\repo\org\springframework\boot\spring-boot-starter-jdbc\2.1.1.RELEASE\spring-boot-starter-jdbc-2.1.1.RELEASE.jar;G:\repo\com\zaxxer\HikariCP\3.2.0\HikariCP-3.2.0.jar;G:\repo\org\springframework\spring-jdbc\5.1.3.RELEASE\spring-jdbc-5.1.3.RELEASE.jar;G:\repo\com\alibaba\druid\1.1.6\druid-1.1.6.jar;G:\repo\mysql\mysql-connector-java\5.1.47\mysql-connector-java-5.1.47.jar;G:\repo\com\baomidou\mybatis-plus-generator\3.1.1\mybatis-plus-generator-3.1.1.jar;G:\repo\com\baomidou\mybatis-plus-extension\3.1.1\mybatis-plus-extension-3.1.1.jar;G:\repo\com\baomidou\mybatis-plus-core\3.1.1\mybatis-plus-core-3.1.1.jar;G:\repo\com\baomidou\mybatis-plus-annotation\3.1.1\mybatis-plus-annotation-3.1.1.jar;G:\repo\com\github\jsqlparser\jsqlparser\1.2\jsqlparser-1.2.jar;G:\repo\org\mybatis\mybatis\3.5.1\mybatis-3.5.1.jar;G:\repo\org\mybatis\mybatis-spring\2.0.1\mybatis-spring-2.0.1.jar;G:\repo\org\apache\velocity\velocity-engine-core\2.1\velocity-engine-core-2.1.jar;G:\repo\org\apache\commons\commons-lang3\3.8.1\commons-lang3-3.8.1.jar;G:\repo\org\slf4j\slf4j-api\1.7.25\slf4j-api-1.7.25.jar;G:\repo\org\apache\activemq\activemq-all\5.15.8\activemq-all-5.15.8.jar;G:\repo\org\jxls\jxls\2.6.0\jxls-2.6.0.jar;G:\repo\org\apache\commons\commons-jexl3\3.1\commons-jexl3-3.1.jar;G:\repo\commons-logging\commons-logging\1.2\commons-logging-1.2.jar;G:\repo\commons-beanutils\commons-beanutils\1.9.3\commons-beanutils-1.9.3.jar;G:\repo\commons-collections\commons-collections\3.2.2\commons-collections-3.2.2.jar;G:\repo\org\slf4j\jcl-over-slf4j\1.7.25\jcl-over-slf4j-1.7.25.jar;G:\repo\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;G:\repo\org\jxls\jxls-poi\1.2.0\jxls-poi-1.2.0.jar;G:\repo\org\apache\poi\poi\4.0.1\poi-4.0.1.jar;G:\repo\commons-codec\commons-codec\1.11\commons-codec-1.11.jar;G:\repo\org\apache\commons\commons-collections4\4.2\commons-collections4-4.2.jar;G:\repo\org\apache\commons\commons-math3\3.6.1\commons-math3-3.6.1.jar;G:\repo\org\apache\poi\poi-ooxml\4.0.1\poi-ooxml-4.0.1.jar;G:\repo\org\apache\poi\poi-ooxml-schemas\4.0.1\poi-ooxml-schemas-4.0.1.jar;G:\repo\org\apache\xmlbeans\xmlbeans\3.0.2\xmlbeans-3.0.2.jar;G:\repo\org\apache\commons\commons-compress\1.18\commons-compress-1.18.jar;G:\repo\com\github\virtuald\curvesapi\1.05\curvesapi-1.05.jar;G:\repo\org\jxls\jxls-jexcel\1.0.8\jxls-jexcel-1.0.8.jar;G:\repo\net\sourceforge\jexcelapi\jxl\2.6.10\jxl-2.6.10.jar;G:\repo\log4j\log4j\1.2.14\log4j-1.2.14.jar;G:\repo\org\apache\commons\commons-jexl\2.1.1\commons-jexl-2.1.1.jar;G:\repo\org\jxls\jxls-reader\2.0.5\jxls-reader-2.0.5.jar;G:\repo\org\apache\commons\commons-digester3\3.2\commons-digester3-3.2-with-deps.jar;G:\repo\cglib\cglib\2.2.2\cglib-2.2.2.jar;G:\repo\asm\asm\3.3.1\asm-3.3.1.jar;G:\repo\com\alibaba\fastjson\1.2.47\fastjson-1.2.47.jar;G:\repo\org\springframework\boot\spring-boot-starter-data-mongodb\2.1.1.RELEASE\spring-boot-starter-data-mongodb-2.1.1.RELEASE.jar;G:\repo\org\mongodb\mongodb-driver\3.8.2\mongodb-driver-3.8.2.jar;G:\repo\org\mongodb\bson\3.8.2\bson-3.8.2.jar;G:\repo\org\mongodb\mongodb-driver-core\3.8.2\mongodb-driver-core-3.8.2.jar;G:\repo\org\springframework\data\spring-data-mongodb\2.1.3.RELEASE\spring-data-mongodb-2.1.3.RELEASE.jar;G:\repo\org\springframework\spring-tx\5.1.3.RELEASE\spring-tx-5.1.3.RELEASE.jar;G:\repo\org\springframework\data\spring-data-commons\2.1.3.RELEASE\spring-data-commons-2.1.3.RELEASE.jar;G:\repo\joda-time\joda-time\2.9.1\joda-time-2.9.1.jar;G:\repo\org\jodd\jodd-http\3.7.1\jodd-http-3.7.1.jar;G:\repo\org\jodd\jodd-core\3.7.1\jodd-core-3.7.1.jar;G:\repo\org\jodd\jodd-upload\3.7.1\jodd-upload-3.7.1.jar;G:\repo\org\assertj\assertj-core\3.11.1\assertj-core-3.11.1.jar" com.dada.springboot_jsp.study.controller.Demo34
Exception in thread "main" java.lang.UnsupportedOperationException
	at java.util.AbstractList.add(AbstractList.java:148)
	at java.util.AbstractList.add(AbstractList.java:108)
	at com.dada.springboot_jsp.study.controller.Demo34.main(Demo34.java:15)

Process finished with exit code 1

2.分析问题

我们只能带着疑问去看下源码了(asList和new 的ArrayList有什么区别啊)

   

 我们可以看出Arrays的asList方法返回的是Arrays的内部类ArrayList,它并不是java.util.ArrayList,只不过它们的父类都是AbstractList。

而我们可以看到Arrays的内部类ArrayList并没有重写add和remove方法,所以当我调用Arrays的内部类ArrayList的add方法时实际上是集成父类AbstractList的add方法。

我们再看下AbstractList的add方法干了什么:

 所以就会抛出异常了。

然而java.util.ArrayList的add方法重写了父类的方法,所以不会报错。

 

 

3.解决办法

对Arrays的内部类ArrayList包一层,这样就不报错啦!

 总结:

分享最近喜欢的一句话:

生活就是一个游乐场,要不然就坐过山车,享受那种惊险刺激,头晕目眩的感觉尖叫,要不就坐旋转木马,一圈圈的周而复始。

我是阿达,一名喜欢分享知识的程序员,时不时的也会荒腔走板的聊一聊电影、电视剧、音乐、漫画,这里已经有22354位小伙伴在等你们啦,感兴趣的就赶紧来点击关注我把,哪里有不明白或有不同观点的地方欢迎留言!

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
引用\[1\]中的异常"java.lang.UnsupportedOperationException: null"是由于在使用Arrays.asList()方法将数组转换为列表时,生成的列表是Arrays的内部类ArrayList,而不是java.util.ArrayList。这两个ArrayList都继承自AbstractList,但是Arrays的内部类ArrayList没有重写AbstractList的add和remove方法,而是直接抛出了java.lang.UnsupportedOperationException异常。因此,当使用add或remove方法时,会导致该异常的抛出。\[2\] 另外,引用\[3\]中提到,如果在xml文件中的resultType类型定义错误,也会导致类似的异常。在这种情况下,需要确保resultType的类型与实际的实体类类型匹配,以避免出现java.lang.UnsupportedOperationException异常。\[3\] #### 引用[.reference_title] - *1* *2* [java.lang.UnsupportedOperationException: null异常处理](https://blog.csdn.net/qq_40236927/article/details/123198161)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Caused by: java.lang.UnsupportedOperationException: null 解决办法](https://blog.csdn.net/qq_37950196/article/details/108627860)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

开心的码字达

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值