记录亮点--java重载的好处

1.好处

关键词:嵌入式编码、易扩展、向下兼容。

2.示例

①先写的方法的代码给后写的新方法,先写的调后写的方法,传入默认参数。

    //将页面传来的echarts赋值给dataset,如果有重复的x轴的值,后面的会覆盖前面的
    private void setDatasetJsonData(String xData, String yData, DefaultCategoryDataset dataset) {
        setDatasetJsonData(xData, yData, dataset, true);
    }

    //将页面传来的echarts赋值给dataset,如果有重复的x轴的值,后面的会覆盖前面的
    private void setDatasetJsonData(String xData, String yData, DefaultCategoryDataset dataset, Boolean isReverse) {
        if (StringUtils.isNotEmpty(xData) && StringUtils.isNotEmpty(yData)) {
            List<Integer> ints = JsonUtil.json2pojo(xData, List.class);
            List<String> strings = JsonUtil.json2pojo(yData, List.class);
            if (isReverse) {
                Collections.reverse(ints);
                Collections.reverse(strings);
            }
            for (int i = 0; i < ints.size(); i++) {
                dataset.setValue(ints.get(i), "", "-" + i + "-" + strings.get(i));
            }
        }
    }

②后写的新方法根据参数来扩展。就可以将一段新代码嵌入到原代码里面,并兼容原来的调用。

    /**
     * @param objectList 报表内容list
     * @param copyPath 生成文件路径(至文件名)
     * @param title  报表标题
     * @param columnHeaders 报表 列标题数组
     * @param <T> 内容类型
     * @throws IllegalAccessException
     */
    public static <T> void generatePdfFile(List<T> objectList, String copyPath, String title, String[] columnHeaders,DefaultCategoryDataset dataset,String pdfTitle)  {
        generatePdfFile(objectList,copyPath,title,columnHeaders,dataset,pdfTitle,null,null);
    }
    /**
     * @param objectList 报表内容list
     * @param copyPath 生成文件路径(至文件名)
     * @param title  报表标题
     * @param columnHeaders 报表 列标题数组
     * @param <T> 内容类型
     * @throws IllegalAccessException
     */
    public static <T> void generatePdfFile(List<T> objectList, String copyPath, String title, String[] columnHeaders,DefaultCategoryDataset dataset,String pdfTitle, DefaultCategoryDataset dataset2,String pdfTitle2)  {
        try {
            // 新建文件
            Document document = new Document();
            //建立一个书写器(Writer)与document对象关联,并把文档写入到磁盘中
            PdfWriter.getInstance(document, new FileOutputStream(copyPath));
            document.open();
            // 中文字体
//            BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
//            BaseFont bfChinese = BaseFont.createFont(BaseFont.COURIER, BaseFont.CP1257, BaseFont.EMBEDDED);
//            // 标题字体
//            Font titleChinese = new Font(bfChinese, 16, Font.BOLD);
//            // 内容小标题字体
//            Font contenttitleChinese = new Font(bfChinese, 11, Font.BOLD);
//            //设置标题
//            Paragraph par = new Paragraph(new String(title.getBytes(StandardCharsets.UTF_8)), titleChinese);
//            par.setAlignment(Element.ALIGN_CENTER);
//            //文档中加入标题
//            document.add(par);
//            //文档中加入空行
            Paragraph blankRow51 = new Paragraph(18f, " ", null);
            document.add(blankRow51);
            //设置表格的列数
            int col = columnHeaders.length;
            //新建一个表格
            PdfPTable table = new PdfPTable(col);
            //设置表格占PDF文档100%宽度
            table.setWidthPercentage(100);
            //设置每列表格宽度
            int[] widths=new int[columnHeaders.length];
            int wight=100/columnHeaders.length;
            for (int i = 0; i < widths.length; i++) {
                widths[i]=wight;
            }
            table.setWidths(widths);
            //设置表格标题样式
            BaseColor lightGrey01 = new BaseColor(0xCC,0xCC,0xCC);
            for (int i = 0; i < columnHeaders.length; i++) {
                PdfPCell cell = toPdfPCell(columnHeaders[i],Element.ALIGN_CENTER);
                cell.setBackgroundColor(lightGrey01);
                table.addCell(cell);
            }
            //表格赋值啊,这里使用反射获取对象属性
            if (objectList.size()>0){
                for (T obj : objectList) {
                    Field[] fields= obj.getClass().getDeclaredFields();
                    for (Field field : fields) {
                        field.setAccessible(true);
                        String str ;
                        if (field.get(obj)==null){
                            str = "";
                        }else{
                            str = new String(field.get(obj).toString().getBytes(StandardCharsets.UTF_8));
                        }

                        table.addCell(toPdfPCell(str,Element.ALIGN_CENTER));
                    }
                }
            }
            //把表格加入到文档中
            document.add(table);
            Image image = getImage(dataset, pdfTitle);
            document.add(image);
            if(dataset2 != null){
                Image image1 = getImage(dataset2, pdfTitle2);
                document.add(image1);
            }
            //关闭文档
            document.close();
        } catch (DocumentException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值