其他博客:
MyBatis之java.lang.UnsupportedOperationException异常解决方案
- 结论:resultType返回的是集合中的元素类型(resultType="String"),而不是集合本身(resultType="java.util.List")
List 进行 remove 操作时抛出 java.lang.UnsupportedOperationException 异常分析
问题解析:
使用 Arrays.asList(arr) 转换的 List 并不能进行 add 和 remove 操作。
Arrays.asList(arr) 返回的类型是 Aarrays$ArrayList 并不是 ArrayList,
Aarrays$ArrayList 和 ArrayList 都继承 AbstractList,但是 AbstractList 中的 add 方法和 remove 方法都是直接抛出 UnsupportedOperationException,并没有直接实现。
ArrayList 重写了 add 方法和 remove 方法,能够进行对应的添加和删除操作,Aarrays$ArrayList 却没有去重写,所以此时调用 add 方法和 remove 方法会抛出 UnsupportedOperationException。String[] ss = new String[] { "111", "222" };
//String[] 转 List 处理ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList(ss));
范例:
package com.company.test; import java.util.Arrays; import java.util.List; public class ArrayListTest { public static void main(String[] args) { String[] ss = new String[]{"111","222"}; List<String> list = Arrays.asList(ss); //ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList(ss)); list.add("333"); for (String string : list) { System.out.println(string); } } }
结果:
Exception in thread "main" java.lang.UnsupportedOperationException at java.util.AbstractList.add(Unknown Source) at java.util.AbstractList.add(Unknown Source) at com.jiuqi.test.ArrayListTest.main(ArrayListTest.java:12)
解决办法:
package com.company.test; import java.util.ArrayList; import java.util.Arrays; public class ArrayListTest { public static void main(String[] args) { String[] ss = new String[] { "111", "222" }; // //String[] 转 List 处理 ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList(ss)); arrayList.add("333"); for (String string : arrayList) { System.out.println(string); } } }
结果:
111 222 333