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

如何动态创建请求映射?无需switch/if-else的实现方案

替代大量if-else创建Mapper的简洁方案

可以用映射表+函数式接口的方式彻底消除条件判断,代码更简洁且易于扩展:

1. 复用函数式接口(或自定义语义化接口)

如果所有Mapper的创建方法签名一致(接收inputpayload并返回Mapper),直接用Java内置的Function接口即可,也可以自定义更语义化的接口:

@FunctionalInterface
interface MapperCreator {
    Mapper create(String inputPayload);
}

2. 初始化请求类型与创建逻辑的映射表

提前把所有请求类型对应的Mapper创建逻辑存入静态Map,避免重复初始化:

private static final Map<String, MapperCreator> MAPPER_CREATORS = new HashMap<>();

static {
    MAPPER_CREATORS.put("AAA", RequestMapperAAA::createTypeRequest);
    MAPPER_CREATORS.put("BBB", RequestMapperBBB::createTypeRequest);
    MAPPER_CREATORS.put("CCC", RequestMapperCCC::createTypeRequest);
    MAPPER_CREATORS.put("DDD", RequestMapperDDD::createTypeRequest);
    // 后续新增类型直接在这里添加条目即可
}

3. 核心创建逻辑

一行代码完成Mapper实例化,完全不需要条件判断:

// 用Optional处理未知请求类型,避免空指针
Mapper mapper = Optional.ofNullable(MAPPER_CREATORS.get(requestType))
                        .map(creator -> creator.create(inputpayload))
                        .orElseThrow(() -> new IllegalArgumentException("不支持的请求类型: " + requestType));

方案优势

  • 扩展性强:新增请求类型时,仅需在静态代码块中添加映射条目,无需修改业务逻辑,符合开闭原则。
  • 代码简洁:把分散的条件判断集中到一处,业务逻辑一目了然。
  • 可维护性高:所有类型与创建逻辑的对应关系清晰,便于后续修改或排查问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 16:55:09