SonarQube建议改用Workbook后提示抽象类无法实例化如何解决
修复方案
你对SonarQube的提示存在理解偏差:它要求的是变量声明时使用更通用的Workbook接口类型,而非要求你直接实例化Workbook本身,org.apache.poi.ss.usermodel.Workbook本质是顶层接口,本身就不能被直接实例化。
你只需要修改构造方法里的实例化逻辑,实例化时继续使用你之前的XSSFWorkbook实现类即可,变量声明保持Workbook类型不变,既满足SonarQube面向接口编程的规范要求,也解决了实例化报错的问题。
修复后的代码如下:
import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.util.concurrent.atomic.AtomicInteger; public class WorkSheet { private Workbook workbook; private Sheet sheet; private AtomicInteger rowCount; public WorkSheet(String title) { // 声明用通用接口Workbook,实例化用具体实现类XSSFWorkbook this.workbook = new XSSFWorkbook(); this.sheet = workbook.createSheet(title); this.rowCount = new AtomicInteger(0); } public Workbook getWorkbook() { return workbook; } public Sheet getSheet() { return sheet; } public AtomicInteger getRowCount() { return rowCount; } }
如果后续你需要适配xls格式导出,或者要处理大数据量导出避免内存溢出,只需要把实例化的实现类换成HSSFWorkbook或者SXSSFWorkbook即可,其他用到workbook变量的代码不需要做任何修改,这就是SonarQube要求使用通用类型的核心价值。
内容的提问来源于stack exchange,提问作者user17188729
相关产品推荐
相关产品推荐

