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

如何将三个同逻辑不同入参类型的calculateAmount方法重构为单一方法?

单一方法处理三种入参类型的可行方案

如果不想提取统一的Value对象,确实可以实现单一方法接受三种入参类型,核心思路是用Object作为参数,结合instanceof做类型判断,具体代码实现如下:

// 假设常量定义
public static final String EXCESS_300_VALUE = "EXCESS_300";
public static final String VALUE_300 = "300";

public static String calculateAmount(Object input) {
    // 处理RState类型的特殊逻辑
    if (input instanceof RState) {
        RState rState = (RState) input;
        return rState.getValue() == null ? EXCESS_300_VALUE : VALUE_300;
    }
    // 处理QRequest和CState的通用逻辑
    else if (input instanceof QRequest || input instanceof CState) {
        return VALUE_300;
    }
    // 非法类型抛出异常
    else {
        throw new IllegalArgumentException("不支持的入参类型: " + input.getClass().getName());
    }
}

方案优缺点

  • 优点:完全满足「单一方法」的需求,无需修改原有三个类的结构,快速实现逻辑统一。
  • 缺点:
    • 失去编译时类型检查,传入非指定类型的对象只能在运行时抛出异常;
    • 依赖强制类型转换,代码类型安全性不足,后期修改类结构时容易出现遗漏。

补充说明

如果允许给三个类新增共同接口(比如HasValue,定义getValue()方法),可以用泛型+接口约束实现更优雅的单一方法,但这本质上属于「提取Value接口」的思路,不符合你不想这么做的前提,因此上面的Object+instanceof是最直接的方案。

内容的提问来源于stack exchange,提问作者runnerpaul

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 09:50:42