gpt4 book ai didi

java - 符合 SonarQube 的解决方案,增加细胞值(value)

转载 作者:行者123 更新时间:2023-11-30 01:43:12 24 4
gpt4 key购买 nike

我正在使用 Apache POI 从 Java POJO 类创建 Excel。

POJO 有 65 个字段,在创建 POJO 时需要填充这些字段。

我想到的一种方法是 -

int i = 0;
hssfRow.createCell(i++).setCellValue(POJO.getField1());
hssfRow.createCell(i++).setCellValue(POJO.getField2());
hssfRow.createCell(i++).setCellValue(POJO.getField3());
.....
hssfRow.createCell(i++).setCellValue(POJO.getField65());

上述方法的缺点是 SonarQube 表示它不符合以下原因

Extract this increment or decrement operator into a dedicated statement

第一个问题是为什么这里不建议使用i++

此外,是否建议在单独的 Constant 类中声明从 1 到 65 的常量并使用它而不是 i++ (即 hssfRow.createCell(Constant.ONE) )?

除了这个解决方案之外,是否有任何替代方案是合规且更好的方法?

最佳答案

我可以是这样的:

private static final Map<Integer, Function<POJO, TypeOfCellValue>> cellDataProviders = new HashMap<>(); 
static{
cellDataProviders.put(1, POJO -> POJO.getField1());
cellDataProviders.put(2, POJO -> POJO.getField2());
...
}

并在代码中使用:

IntStream.range(1, cellDataProviders.size()).foreach( i -> hssfRow.createCell(i).setCellValue(cellDataProviders.get(i).apply(POJO)));

或者使用传统的 for 循环:

for(int i = 0; i < cellDataProviders.size(); i++){
hssfRow.createCell(i).setCellValue(cellDataProviders.get(i).apply(POJO));
}

从 POJO 到单元的映射已与数据填充代码分离。

关于java - 符合 SonarQube 的解决方案,增加细胞值(value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59215832/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com