用list.add()时报错:
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.xxx.xxx.svr.App.main(App.java:37)
重现错误代码:
public static void main(String[] args)throws Exception {
Map<Integer, List<Integer>> itemShopMap = new HashMap<>();
itemShopMap.put(1, Arrays.asList(3));
List<Integer> shopIdList = itemShopMap.get(1);
shopIdList.add(6);
}
可改成:
public static void main(String[] args)throws Exception {
Map<Integer, List<Integer>> itemShopMap = new HashMap<>();
// itemShopMap.put(1, Arrays.asList(3));
List<Integer> num=new ArrayList<>();
num.add(9);
itemShopMap.put(1,num);
List<Integer> shopIdList = itemShopMap.get(1);
shopIdList.add(6);
}
发生问题的原因如下:
调用Arrays.asList()产生的List中add、remove方法时报异常,这是由于Arrays.asList()返回的是Arrays的内部类ArrayList, 而不是java.util.ArrayList。Arrays的内部类ArrayList和java.util.ArrayList都是继承AbstractList,remove、add等方法在AbstractList中是默认throw UnsupportedOperationException而且不作任何操作。java.util.ArrayList重写这些方法而Arrays的内部类ArrayList没有重写,所以会抛出异常。