踩坑UnsupportedOperationException异常

前言:昨天在进行字符串拆分时,使用了Arrays.asList()方法将数组转为了ArrayList集合,然后对这个集合使用了add()方法,结果抛出了UnsupportedOperationException异常。
今天来找一下原因并且记录一下踩坑经历

话不多说,上图。

编写一个测试类:
在这里插入图片描述还原我昨天的操作,我们直接跑一下看结果是不是返回 a,b,c,d

在这里插入图片描述这里我们可以看出,抛出了UnsupportedOperationException异常

起初我并没有找到原因,因为前端传参可能为逗号分隔的多个参数(这里我用这个测试类模拟了一下)。参数可能为多个,我发现当参数为单个时并没有抛出这个异常,当参数为多个的时候就有这个异常,我们再用测试类模拟一下。

在这里插入图片描述然后我们跑一下,看结果

在这里插入图片描述结果并未抛出异常,证明问题出在 strList = Arrays.asList 这个地方,我们看一下asList做了什么,为什么会抛出这个异常。

在这里插入图片描述我们点进去看一下这个ArrayList集合,和平时我们用的集合有什么不同

在这里插入图片描述通过图片我们可以看到Array.asList()方法返回的并不是我们熟悉的ArrayList类,而是自己的一个内部类

其实到这里已经离真相不远了,我们可以看到这个内部类继承了一个抽象类AbstractList,异常很有可能是这个AbstractList抛出的,我们点进去看一下。

在这里插入图片描述这里它调用了另一个add方法,我们找一下。

在这里插入图片描述

总结:Arrays.asList()方法返回的并不是我们常用的ArrayList类,而是自己的一个内部类,这个内部类继承了一个叫AbstractList的抽象类,UnsupportedOperationException异常就来自于这个抽象类,也就是我们调用Arrays.asList()方法得到的ArrayList集合不能进行add操作(调用remove方法也会抛这个异常)。

好像我图片上有一个Arrays.asList()方法拼错了,写成了Array.asList(),希望大家不要介意,如果有说的不准确的地方,还希望各位大神给我指出来,万分感谢!以此记录一下这个坑,希望能帮到各位。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值