java.lang.UnsupportedOperationException
今天在删除集合中一个元素的时候报了一个这样的错误:
java.lang.UnsupportedOperationExceptionat java.util.AbstractList.remove(AbstractList.java:161)
atcom.ccb.pactera.baserecycleradapter.base.BaseRecyclerAdapter.remove(BaseRecyclerAdapter.java:47) atcom.ccb.pactera.baserecycleradapter.MainActivity$Ap$1.onClick(MainActivity.java:69)
at android.view.View.performClick(View.java:6291)
at android.view.View$PerformClick.run(View.java:24931)
at android.os.Handler.handleCallback(Handler.java:808)
at android.os.Handler.dispatchMessage(Handler.java:101)
at android.os.Looper.loop(Looper.java:166)
at android.app.ActivityThread.main(ActivityThread.java:7425)
at java.lang.reflect.Method.invoke(Native Method) atcom.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)
索引指向了这行代码:
items.remove(position);
我就删除个集合中的元素能有什么错!但是它就是一直崩溃;
于是
在网上查一下原因是因为部分集合类型一样但是缺少部分方法或不支持。
如特殊情况如下:
常常使用Arrays.asLisvt()后调用add,remove这些method时出现java.lang.UnsupportedOperationException异常。这是由于:
Arrays.asLisvt() 返回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。
解决方法是使用Iterator,或者转换为ArrayList;(摘至:http://topmanopensource.iteye.com/blog/542279)
原来是因为我的集合是Arrays.asLisvt();
private List<String> d = Arrays.asList( "A","B","C","D","E","F","G" ,"H","I","J","K","L","M","N" ,"O","P","Q","R","S","T" ,"U","V","W","X","Y","Z");
修改后:
datas = new ArrayList<>(); for (int i = 0; i < d.size(); i++) { datas.add(d.get(i)); }完美!!!