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

问题描述:

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)

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

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

猜你喜欢

转载自blog.csdn.net/chenthe1/article/details/129406676