今天 遇到了一个bug,抛出的异常大致是下面这样的。
java.lang.UnsupportedOperationException: null
at java.util.AbstractList.add(AbstractList.java:148) ~[?:1.8.0_131]
at java.util.AbstractList.add(AbstractList.java:108) ~[?:1.8.0_131]
代码大致内容和下面这个差不多
public class test { public static void main(String[] args) { //定义一个字符长度为5的字符串 String[] strings = new String[5]; strings[0] = "a"; strings[1] = "b"; strings[2] = "c"; strings[3] = "d"; strings[4] = "e"; //调用Arrays中的asList方法将String[]转化为ListList list = Arrays.asList(strings); System.out.println("list :"+list.toString()); //为list添加一个元素 list.add("f"); System.out.println("list :"+list.toString()); } }
表面上看是没有什么问题的,我们在将数组转成List的时候也经常会这么做,但是执行这样的代码的时候还是报错了,这就很奇怪。
我们看一下上面的报错信息得知是在AbstractList.java:148位置报的错,我们找到对应的位置
调用这个方法时总是抛出异常。
我们在看一下这个位置AbstractList.java:108
都是英文看不懂,翻译翻译,看看说的是啥
哦 这里面让我们注意不重写这个add(int,e)方法的话就会抛出上面的异常。
问题其实是出在这一行
List
list = Arrays.asList(strings);
Arrays.asList(strings);方法返回的List对象不是我们常见的ArrayList,而是Arrays的一个内部类
让我们看一下这个内部类都有哪些方法
其中并没有重写add方法,所以在调用add方法的时候会执行父类的add方法(也就是上面我们截图的方法),这样报错的原因就找到了。
找到原因后,问题就好解决了,我们把返回的对象处理一下 转成我们熟悉的List实现类就可以了,
方法一:
Listlist = new ArrayList<>(Arrays.asList(strings));
方法二:
Listlist = new ArrayList<>(); list.addAll(Arrays.asList(strings));
搞定!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)