java List报错Method threw ‘java.lang.UnsupportedOperationException‘ exception. 解决

当使用Arrays.asList()初始化List后尝试添加元素时,可能会遇到`UnsupportedOperationException`。这是因为Arrays.asList()返回的是一个固定大小的列表,不支持add操作。解决方法包括使用新的ArrayList包装初始化的列表,或者进行深拷贝。正确的做法是在初始化时使用`newArrayList<>(Arrays.asList())`来创建可变的List。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:

List使用Arrays.asList()初始化后,再add对象时报错

Method threw 'java.lang.UnsupportedOperationException' exception.

错误示例如下:

List<ExportListVO.ExportSheet> sheetVOList = Arrays.asList(
        new ExportListVO.ExportSheet("导出合价",0L,1),
        new ExportListVO.ExportSheet("导出工料机",0L,2),
        new ExportListVO.ExportSheet("导出造价经济指标",0L,3));
for (TbProjectStructure iVO : structureList) {
    ExportListVO.ExportSheet sheetVO = new ExportListVO.ExportSheet();
    sheetVO.setId(iVO.getProjectId());
    sheetVO.setName(iVO.getName() + "-造价汇总");
    sheetVO.setSheetType(5);
    sheetVOList.add(sheetVO);
}
sheetVOList.add(new ExportListVO.ExportSheet("导出分类经济指标",0L,4));
projectVo.setSheetList(sheetVOList);
newList.add(projectVo);

问题

以上代码第10行执行时add报错;

原因

Arrays.asList()返回的 List<> 与 new ArrayList<>() 不是一个类型,缺少泛型结构;

new ArrayList<>()底层是重写了 Arrays.asList();

因此,集合的方法在 Arrays.asList() 里是没有的。


正确示例如下:

List<ExportListVO.ExportSheet> sheetVOList = new ArrayList<>(Arrays.asList(
        new ExportListVO.ExportSheet("导出合价",0L,1),
        new ExportListVO.ExportSheet("导出工料机",0L,2),
        new ExportListVO.ExportSheet("导出造价经济指标",0L,3)));
for (TbProjectStructure iVO : structureList) {
    ExportListVO.ExportSheet sheetVO = new ExportListVO.ExportSheet();
    sheetVO.setId(iVO.getProjectId());
    sheetVO.setName(iVO.getName() + "-造价汇总");
    sheetVO.setSheetType(5);
    sheetVOList.add(sheetVO);
}
sheetVOList.add(new ExportListVO.ExportSheet("导出分类经济指标",0L,4));
projectVo.setSheetList(sheetVOList);
newList.add(projectVo);

解决办法:

1.办法很简单,再套一层即可,如下:
new ArrayList<>(Arrays.asList());
2.深拷贝 ArrayList,如下:
Lits<String>list = new ArrayList();
Lits<String>list2 = new ArrayList(list );
3.也可以使用,如下:
Lits<String>list1 = new ArrayList();
Lits<String>list2 = new ArrayList();
list2.addAll(list1)

如果本篇文章对你有帮助的话,很高兴能够帮助上你。

当然,如果你觉得文章有什么让你觉得不合理、或者有更简单的实现方法又或者有理解不来的地方,希望你在看到之后能够在评论里指出来,我会在看到之后尽快的回复你。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值