You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

泛型类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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 04:15:42