《javalangUnsupportedOperationException.docx》由会员分享,可在线阅读,更多相关《javalangUnsupportedOperationException.docx(3页珍藏版)》请在三一办公上搜索。
1、javalangUnsupportedOperationExceptionjava.lang.UnsupportedOperationException(不支持操作异常) package com.test; import java.util.Arrays; public class aa public static void main(String args) / TODO Auto-generated method stub String str=1,2,3,4,5,6,7,8,9,0; java.util.List list=Arrays.asList(str.split(,); Syst
2、em.out.println(-1-); list.remove(0); System.out.println(-2-); 异常消息: -1- Exception in thread main java.lang.UnsupportedOperationException at java.util.AbstractList.remove(AbstractList.java:161) at java.util.AbstractList$Itr.remove(AbstractList.java:374) at java.util.AbstractCollection.remove(Abstract
3、Collection.java:291) at com.test.aa.main(aa.java:12) 解决方案: package com.test; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class aa public static void main(String args) / TODO Auto-generated method stub String str=1,2,3,4,5,6,7,8,9,0; java.util.List list=Arrays.a
4、sList(str.split(,); /解决方案 List list2=new ArrayList; for(String str2 :str.split(,) list2.add(str2); System.out.println(-1-); / list.remove(0); list2.remove(0); System.out.println(-2-); 输出结果: -1- -2- 解析原理: 使用Arrays.asList后调用add,remove这些method时出现java.lang.UnsupportedOperationException异常。这是由于: Arrays.as
5、List 返回java.util.Arrays$ArrayList, 而不是ArrayList。Arrays$ArrayList和ArrayList都是继承AbstractList,remove,add等 method在AbstractList中是默认throw UnsupportedOperationException而且不作任何操作。ArrayList override这些method来对list进行操作,但是Arrays$ArrayList没有override remove(int),add(int)等,所以throw UnsupportedOperationException。 解决方
6、法是使用Iterator,或者转换为ArrayList List list = Arrays.asList(a); List arrayList = new ArrayList(list); AbstractCollectionimplements List此类提供 List 接口的骨干实现,以最大限度地减少实现“随机访问”数据存储支持的该接口所需的工作。对于连续的访问数据,应优先使用 AbstractSequentialList,而不是此类。 要实现不可修改的列表,编程人员只需扩展此类,并提供 get(int) 和 size 方法的实现。 要实现可修改的列表,编程人员必须另外重写 set(int, E) 方法。如果列表为可变大小,则编程人员必须另外重写 add(int, E) 和 remove(int) 方法。 按照 Collection 接口规范中的建议,编程人员通常应该提供一个 void和 collection 构造方法。 与其他抽象 collection 实现不同,编程人员不必 提供迭代器实现;迭代器和列表迭代器由此类在以下“随机访问”方法上实现:get(int)、set(int, E)、add(int, E) 和 remove(int)。