本文共 936 字,大约阅读时间需要 3 分钟。
Exception in thread "main" java.lang.UnsupportedOperationException at java.util.AbstractList.add(AbstractList.java:151) at java.util.AbstractList.add(AbstractList.java:89) at main(TesException.java:20)
List a = Arrays.asList(String []); a.remove("test");
查看源码可知,Arrays.asList()方法返回类型为Arrays$ArrayList。该类型为Arrays内自己实现的ArrayList类,与常用的java.util.ArrayList实现有所不同,具体如下:
Arrays$ArrayList:
实现的方法:java.util.ArrayList:
实现的方法:可见Arrays.asList并没有实现cloneable接口,因此调用clone()方法则会报错。
其继承父类AbstractList但又没有实现自己的add,remove等方法。而在AbstractList中,调用add,remove等方法会抛出异常之所以没有异常提示,是因为AbstractList实现List接口
在使用时采取向上转型的方式如 List fu = Arrays.asList(String[]); 父类包含了子类没有重写的方法,使用fu.add(E e);时优先选择了Arrays$ArrayList继承自AbstractList中的add,因此报 UnSupportException。解决办法很简单,将该List转为java.util包下的实现List接口的其他List,如:
List list = Arrays.asList(a[]); List arrayList = new ArrayList(list);转载地址:http://vfkai.baihongyu.com/