我正在开发一个旧的 Struts 应用程序,它具有通过填充 Excel 模板文件来创建 Excel 导出的抽象操作。
每个 Excel 导出操作都扩展了这个父类并添加了自己的实现来填充 Excel 模板并定义了自己的模板和输出文件名。
public abstract class ExcelExportAction extends BaseAction {
protected abstract String getInputFilename();
protected abstract String getOutputFilename();
protected abstract HSSFWorkbook modifyWorkbook(HSSFWorkbook workbook, HttpServletRequest request);
@Override
protected final ActionForward run(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
throws Exception {
Workbook workbook = new Workbook(getInputFilename());
workbook = modifyWorkbook(workbook, request);
addWorkBookToResponse(workbook, getOutputFilename());
return null;
}
...
}
实现看起来像这样,这是 SonarQube“警告”代码重复的地方:
public class BudgetReportExcelAction extends ExcelExportAction {
private static final String INPUT_FILENAME = "Report-Budget-Template.xls";
private static final String OUTPUT_FILENAME = "Report-Customerbudget.xls";
@Override
protected String getInputFilename() {
return INPUT_FILENAME;
}
@Override
protected String getOutputFilename() {
return OUTPUT_FILENAME;
}
@Override
protected HSSFWorkbook modifyWorkbook(HSSFWorkbook workbook, HttpServletRequest request) {
/* modify the workbook */
return workbook;
}
}
关于如何避免重复的任何想法?
最佳答案
我在这里看到的代码中几乎没有任何代码重复,但是如果你真的想“从石头上挤水”,你可以在基类中添加一个构造函数,它接受输入文件名和输出-文件名,并使每个派生类将其输入文件名和输出文件名传递给基类的构造函数。
关于java - 避免在抽象类的子类上重复代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43759909/