背景:
今天在跑一个UnitTest,跑的过程中想在list的最后多加一个Element,即 List.add(Element e),多测试一条数据。 可是在run的过程中,却一直在抛:Caused by: java.lang.UnsupportedOperationException。 我对这个异常不了解,凭借自己的有限知识,都不能解决这个问题/最后google到了答案,先上link:
http://craftingjava.blogspot.com/2012/06/how-to-resolve-unsupportedoperationexce.html。
方案:
首先要知道这个是什么:
了解什么是UnsupportedOperationException, 只有知道了它,我们才能更好的来解决这个问题。 官方有个解释是:
Throws:
UnsupportedOperationException - if the add operation is not supported by this list,
也就是说add操作对此list来说,不被支持了。 那么什么情况才不被支持呢?
也就是为什么:
UnsupportedOperationException异常的发生通常都是在集合框架中,例如:List,Queue,Set,Map等等。针对这些集合,我们要知道它是分成不同的type的,一类就可以被修改的,一个就是不能被修改的(就是相当于这个值是固定的,不能被加减)。 也就是link文件里提到的view的概念, 也就是view是read-only 的。
引用
A view is a read-only format of the collections,which means that through view we can traverse the collections and even we can retrieve values.But if you try to modify the collection using view object this will cause an UnsupportedOperationException to be thrown.
也就是说Lists.asList()得到的list是跟new ArrayList() 是不一样的,new出来的List是可以随意add,remove的但是Lists.asList得到的却不能这么玩。这个要看具体的api,例如: List是不能用List.remove(index) 来操作的,但是Map.remove(Key)却不报错。
参考如下代码:
public static void main(String[] args) {
Person person = new User();
List<Person> list = new ArrayList<Person>();
list.add(person);
String s[]={"ram","ganesh","paul"};
List li=Arrays.asList(s);
li.remove(0);
Map map =new HashMap();
map.put("1","Ram");
map.put("2","Ganesh");
map.put("3","Paul");
System.out.println(map);
map.remove("1");
System.out.println(map);
}
现在知道UnsupportedOperationException 异常怎么改了吧:)
----EOF----
分享到:
相关推荐
在Java应用程序运行过程中,"java.lang.OutOfMemoryError: PermGen space"错误是常见的一个问题,尤其是在使用Tomcat这样的Java应用服务器时。这个错误表明应用程序在 PermGen 区域(Permanent Generation)耗尽了...
整个系统都没有错误,但是在发布运行后,控制台上却抛出了这样的异常: java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSource
"Android 兼容性问题:java.lang.UnsupportedOperationException解决办法" Android 兼容性问题:java.lang.UnsupportedOperationException解决办法是 Android 开发中常见的一种问题。该问题会导致应用程序崩溃,...
Android Caused by: java.lang.ClassNotFoundException解决办法 出现问题: 08-13 18:29:22.924: E/AndroidRuntime(1875): Caused by: Java.lang.ClassNotFoundException:XXXXX in loader dalvik.system....
在Java编程中,`java.lang.ClassNotFoundException`是一个常见的运行时异常,它表示JVM尝试加载一个类时,找不到对应的.class文件。在这个特定的错误中,我们看到的是`org.apache.commons.dbcp.BasicDataSource`,这...
异常:Caused by: java.lang.IllegalStateException: Method has too many Body parameters Caused by: java.lang.IllegalStateException: Method has too many Body parameters: public abstract ...
"java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver" 解决方案 [Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket. 解决了jsp连接 sql server 2000的问题
### 错误解析:Caused by: android.system.ErrnoException: write failed: ENOSPC (No space left 在Android开发过程中,可能会遇到“Caused by: android.system.ErrnoException: write failed: ENOSPC (No space ...
Caused by: java.lang.RuntimeException: javax.management.remote.JMXServerErrorException: java.lang.AssertionError: Registered more than one instance with the same objectName : com.bea:Name=wl04,Type=...
java.lang.NoSuchFieldError: Companion 问题的解决方案
### java.lang.UnsupportedClassVersionError: Bad version number in .class file 异常的解决办法 #### 一、问题概述 在使用MyEclipse进行Java开发的过程中,可能会遇到`java.lang.UnsupportedClassVersionError:...
在这个特定的场景中,异常堆栈跟踪显示 `Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type`,这表明在运行时,系统无法找到`org.objectweb.asm.Type`这个类。`org.objectweb.asm` 是一个用于...
在这个特定的场景中,异常堆栈跟踪显示了 `Caused by: java.lang.ClassNotFoundException: org.apache.commons.collections.Transformer`,这表明系统无法找到 `org.apache.commons.collections.Transformer` 类。...
在Java 6、7和8中,Java平台的标准版(Java SE)包含了Java企业版(Java EE)的一些API,如JAXB(Java Architecture for XML Binding)。然而,从Java 9开始,为了实现模块化并提高系统的可维护性和安全性,Java EE...
Caused by: java.lang.NoClassDefFoundError: com.sun.org.apache.xml.internal.resolver.CatalogManager at com.sun.xml.ws.util.xml.XmlUtil.createEntityResolver(XmlUtil.java:266) at org.jvnet.jax_ws_...