代码重构:如何将不同类型的重复代码提取为泛型方法?
提取Builder类中重复逻辑的解决方案
完全可以提取重复逻辑,利用Java的泛型方法就能处理不同类型的列表和参数,既消除重复代码又保持类型安全。
修改后的代码实现
class Builder { private final List<UnitIf> unit = new ArrayList<>(); private final List<TimeIf> time = new ArrayList<>(); public Builder withUnit(final UnitIf aUnit) { addIfNotNull(unit, aUnit); return this; } public Builder withTime(final TimeIf aTime) { addIfNotNull(time, aTime); return this; } // 提取的通用辅助方法,泛型支持任意类型的列表和元素 private <T> void addIfNotNull(List<T> list, T element) { if (element != null) { list.add(element); } } }
逻辑说明
- 新增的
addIfNotNull是泛型私有方法,<T>表示它可以处理任意类型的列表和元素,保证类型匹配不会出错 withUnit和withTime只需要调用这个辅助方法,传入对应的列表和参数,剩下的非空判断和添加逻辑都交给通用方法处理- 这种方式既简化了Builder类的结构,后续如果新增类似的
withXXX方法,也可以直接复用这个辅助方法
内容的提问来源于stack exchange,提问作者ArtRac
相关产品推荐
相关产品推荐

