泛型类OOP设计评审请求:优化ComparisonHelper重复方法
优化方案
1. 用泛型方法消除重复代码
将每个操作符对应的方法改为泛型方法,借助Java自动装箱/拆箱特性,让单个方法覆盖所有基本类型及其包装类,同时能轻松扩展到Date等实现Comparable接口的类型,彻底砍掉重复代码。
优化后的ComparisonHelper类示例:
class ComparisonHelper { // 小于(LT) public static <T extends Comparable<T>> Comparison<T> lt(String key, T value) { return new Comparison<>(ComparisonOperator.LT, key, value); } // 小于等于(LTE) public static <T extends Comparable<T>> Comparison<T> lte(String key, T value) { return new Comparison<>(ComparisonOperator.LTE, key, value); } // 大于(GT) public static <T extends Comparable<T>> Comparison<T> gt(String key, T value) { return new Comparison<>(ComparisonOperator.GT, key, value); } // 大于等于(GTE) public static <T extends Comparable<T>> Comparison<T> gte(String key, T value) { return new Comparison<>(ComparisonOperator.GTE, key, value); } } // 保留原有依赖类逻辑即可 enum ComparisonOperator { LT, LTE, GT, GTE } class Comparison<T extends Comparable<T>> { private final ComparisonOperator operator; private final String key; private final T value; public Comparison(ComparisonOperator operator, String key, T value) { this.operator = operator; this.key = key; this.value = value; } // 按需添加getter或业务方法 }
2. 优化细节说明
- 泛型约束:通过
<T extends Comparable<T>>限定类型必须实现Comparable接口,既保证后续比较逻辑合法,又覆盖了所有数值类型(自动装箱后为Integer/Long等,均实现Comparable)和Date(实现Comparable<Date>)。 - 自动适配:调用
ComparisonHelper.lt("key", 20)时,基本类型int会自动装箱为Integer,完全符合泛型参数要求,无需额外写重载方法。 - 扩展性:未来要支持
LocalDate/BigDecimal等新类型,只要该类型实现Comparable接口,直接调用现有方法即可,不用新增任何代码。
3. 使用示例
// 基本类型调用(保持原有习惯) Comparison<Integer> intComp = ComparisonHelper.lt("age", 20); Comparison<Double> doubleComp = ComparisonHelper.gte("score", 90.5); // Date类型调用 Comparison<Date> dateComp = ComparisonHelper.lte("expireTime", new Date()); // 自定义可比较类型调用 class CustomData implements Comparable<CustomData> { private int id; @Override public int compareTo(CustomData o) { return Integer.compare(this.id, o.id); } } Comparison<CustomData> customComp = ComparisonHelper.gt("data", new CustomData());
内容的提问来源于stack exchange,提问作者farzi_engineer
相关产品推荐
相关产品推荐

