Java如何解决多个方法中的代码重复问题?
解决方案
方案1:直接提取公共方法(实现成本最低,适合短期场景)
如果当前只有这2个导出方法,且确定后续不会新增同类导出逻辑、公共代码改动频率极低,直接把重复代码块分别提取为独立私有方法即可:
- 把
repeated lines-I提取为private void preExport(),放公共前置处理逻辑 - 把
repeated lines-II提取为private MultipartFile postExport(),放公共后置处理逻辑
改造后两个方法只需要调用上述公共方法,插入自身独有逻辑即可,能快速消除重复代码。
方案2:模板方法模式(更推荐,扩展性更好)
如果后续可能新增exportC/exportD等同类导出逻辑,或者公共逻辑存在调整可能,更适合用模板方法模式固定导出流程骨架,把可变的自定义逻辑作为参数传入。配合Java 8的函数式接口可以做到非常轻量的实现,不需要额外创建抽象类继承:
通用模板方法示例:
private MultipartFile exportTemplate(Consumer<Void> customLogic) throws IOException { // repeated lines-I 公共前置逻辑 // 执行传入的自定义逻辑 customLogic.accept(null); // repeated lines-II 公共后置逻辑 // 返回最终生成的MultipartFile }
原有方法改造后:
@Override public MultipartFile exportA() throws IOException { return exportTemplate(v -> { // 仅属于exportA方法的其他逻辑 }); } @Override public MultipartFile exportB() throws IOException { return exportTemplate(v -> { // 仅属于exportB方法的其他逻辑 }); }
这种实现的优势:
- 完全消除重复代码,公共逻辑仅需维护一份,调整时不会出现漏改问题
- 新增导出方法时仅需传入对应自定义逻辑即可,符合开闭原则
- 实现足够轻量,不需要额外增加类层次结构
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

