java.lang.UnsupportedOperationException解决方法

Posted 开心的码字达

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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位小伙伴在等你们啦,感兴趣的就赶紧来点击关注我把,哪里有不明白或有不同观点的地方欢迎留言!

以上是关于java.lang.UnsupportedOperationException解决方法的主要内容,如果未能解决你的问题,请参考以下文章