问题描述:
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)
如果本篇文章对你有帮助的话,很高兴能够帮助上你。
当然,如果你觉得文章有什么让你觉得不合理、或者有更简单的实现方法又或者有理解不来的地方,希望你在看到之后能够在评论里指出来,我会在看到之后尽快的回复你。

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


3659

被折叠的 条评论
为什么被折叠?



