使用ArrayList实例add()方法报错unsupportedOperationException

使用ArrayList实例add()方法报错unsupportedOperationException

首先介绍下报错背景,在我实际开发中,使用add()方法添加元素时报这个错,我百思不得其解,这不就是正常的集合操作方法么?哪里出了问题呢?

我首先想到的是查看ArrayList源码,如下
如图,arraylist中有add,remove,addAll……等方法,而报错信息中提示我们不支持这种操作......
带着疑问,我继续检查以前写的代码,代码中我使用protobuffer作数据入库的序列化和反序列化格式,而当反序列化时

			byte[] taskListBytes = playerDb.getTaskList();
			if (taskListBytes != null) {
				this.alltaskMap.byteRead(DbTaskMapInfo.parseFrom(taskListBytes));
			}`
	taskListBytes为查库返回的字节数组,再转成pb对象。
List<Integer> hadDailyRewardList = new ArrayList<>();
hadDailyRewardList = t.getHadDailyScoreRewardListList();

t–为Pb对象,接下来当我操作hadDailyRewardList使用add()方法时,就出现了这个错误。
看到这里我开始想,是不是pb反序列化时对原来存入的集合格式进行了更改,于是我就继续看生成的pb文件的代码

   private java.util.List<java.lang.Integer> hadDailyScoreRewardList_ = java.util.Collections.emptyList();;

emptyList的类型是来自于下面的代码

 private static class EmptyList<E>
        extends AbstractList<E>

可见它继承了AbstractList,我查看EmptyList中的代码,发现并没有重写add()方法,所以我看一下AbstractList中的add方法,如下::::

    public void add(int index, E element) {
        throw new UnsupportedOperationException();
    }

现在我算是明白了,就是AbstractList不支持这个add方法,只要是继承了AbstractList又没有重写的子类都会发生这种情况。
有这么多类都继承了该抽象类
解决方法
我直接new了个ArrayList,把从pb对象中get的emptyList塞进去,问题解决。

hadDailyRewardList = new ArrayList<>(t.getHadDailyScoreRewardListList());

总结
当遇到问题的时候还是要尽量根据报错信息去看源码,少些百度,多些思考。这虽然是一个很简单的问题,但却也困扰了我一会,以后会继续记录工作学习中遇到的问题,希望大家多多支持,更期待大家的建议和指正,相信能间接影响更多的人。
Sharing is the best learning。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值