Java ClassCastException: xxx cannot be cast to xxx 问题4种情况解决(Java、EasyPoi、JFreeChart、EasyExcel)

103 篇文章 23 订阅
85 篇文章 5 订阅

目录

1 问题描述

2 问题分析

2.1 Java

2.2 EasyPoi

2.3 JFreeChart

2.4 EasyExcel

2.5 Mybatis-Plus

1 问题描述

java.lang.ClassCastException: java.util.HashMap$KeySet cannot be cast to java.util.List

2 问题分析

2.1 Java

1、Set不能直接强转为List,强转会报错。

Map<String, Integer> map= new HashMap<>();
List<String> list= (List<String>) map.keySet();

解决办法:使用new ArrayList()将Set转换为List。

Map<String, Integer> map= new HashMap<>();
List<String> list= new ArrayList(map.keySet());

更多类型之间相互转换请参考以下博客。

 java 数组、List、Set互相转化

2.2 EasyPoi

1、使用EasyPoi进行内容替换时,WordExportUtil.exportWord07()第一个传参类型为org.apache.poi.xwpf.usermodel.XWPFDocument,导致转换成cn.afterturn.easypoi.word.entity.MyXWPFDocument报错。

 public void replaceContent(HttpServletResponse response) {
        try {
            //读文件
            ClassPathResource cpr = new ClassPathResource("/doc/模板.docx");
            XWPFDocument document = new XWPFDocument(cpr.getInputStream());
            //生成文本内容Map
            Map<String, Object> contentMap = new HashMap<>();
            contentMap.put("xudongmaster1", "旭东怪1");
            contentMap.put("xudongmaster2", "旭东怪2");
            //替换文本内容
            WordExportUtil.exportWord07(document, contentMap);
            //返回流
            response.setHeader("content-type", "application/octet-stream");
            response.setContentType("application/octet-stream;charset=UTF-8");
            response.setHeader("Content-Disposition", "attachment; filename=" + new String("模板.docx".getBytes("utf-8"), "ISO-8859-1"));
            OutputStream outputStream = response.getOutputStream();
            document.write(outputStream);
            outputStream.flush();
            outputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

解决办法:

WordExportUtil.exportWord07()第一个传参类型改为cn.afterturn.easypoi.word.entity.MyXWPFDocument。

    public void replaceContent(HttpServletResponse response) {
        try {
            //读文件
            ClassPathResource cpr = new ClassPathResource("/doc/模板.docx");
            XWPFDocument document = new MyXWPFDocument(cpr.getInputStream());
            //生成文本内容Map
            Map<String, Object> contentMap = new HashMap<>();
            contentMap.put("xudongmaster1", "旭东怪1");
            contentMap.put("xudongmaster2", "旭东怪2");
            //替换文本内容
            WordExportUtil.exportWord07(document, contentMap);
            //返回流
            response.setHeader("content-type", "application/octet-stream");
            response.setContentType("application/octet-stream;charset=UTF-8");
            response.setHeader("Content-Disposition", "attachment; filename=" + new String("模板.docx".getBytes("utf-8"), "ISO-8859-1"));
            OutputStream outputStream = response.getOutputStream();
            document.write(outputStream);
            outputStream.flush();
            outputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

2.3 JFreeChart

1、使用ChartFactory.createScatterPlot()创建散点图方法获取JFreeChart类型的对象时,不能使用JFreeChart.getCategoryPlot()方法来获取org.jfree.chart.plot.CategoryPlot类型的plot对象,因为plot对象本身是org.jfree.chart.plot.XYPlot类型,而JFreeChart.getCategoryPlot()方法会直接将org.jfree.chart.plot.CategoryPlot类型强转为org.jfree.chart.plot.XYPlot类型,这会直接导致报错。

解决办法:使用JFreeChart.getXYPlot()方法。

2.4 EasyExcel

1、自定义处理器使用了org.apache.poi.xssf.usermodel.XSSFSheet对象,但是传了org.apache.poi.xssf.streaming.SXSSFSheet对象,导致报错。

解决办法:注册处理器之前先调用.inMemory(Boolean.TRUE)方法,这样就会传org.apache.poi.xssf.usermodel.XSSFSheet对象。

ExcelWriter excelWriter = EasyExcel.write(fileOutputStream)
    .inMemory(Boolean.TRUE).registerWriteHandler(new CustomWaterMarkHandler(waterMarkList)).build();

2.5 Mybatis-Plus

1、分页插件使用了shardingsphere,但是shardingsphere依赖版本太低了,导致报错。

            <dependency>
			    <groupId>org.apache.shardingsphere</groupId>
			    <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
			    <version>4.0.0-RC2</version>
			</dependency>

解决办法:

将shardingsphere依赖版本升级至4.1.1即可。

            <dependency>
			    <groupId>org.apache.shardingsphere</groupId>
			    <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
			    <version>4.1.1</version>
			</dependency>

旭东怪的个人空间-旭东怪个人主页-哔哩哔哩视频哔哩哔哩旭东怪的个人空间,提供旭东怪分享的视频、音频、文章、动态、收藏等内容,关注旭东怪账号,第一时间了解UP注动态。人生低谷不可怕,可怕的是坚持不到人生转折点的那一天https://space.bilibili.com/484264966?spm_id_from=333.337.search-card.all.click 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值