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

如何不使用case语句动态修改Java中SimpleRequestBuilder的方法调用?

动态调用SimpleRequestBuilder方法(无if/case)

可以通过方法引用+映射表的方式实现,完全避免if或case语句,代码精简且易于扩展:

1. 初始化方法映射表

提前把HTTP方法字符串和对应的SimpleRequestBuilder静态方法关联起来:

import java.util.Map;
import java.util.function.Function;

// 全局静态映射,支持扩展其他HTTP方法
private static final Map<String, Function<String, SimpleRequestBuilder>> HTTP_METHOD_MAP = Map.of(
    "get", SimpleRequestBuilder::get,
    "post", SimpleRequestBuilder::post,
    "put", SimpleRequestBuilder::put,
    "delete", SimpleRequestBuilder::delete
);

注:Java 8及以下版本可替换为new HashMap<>()后逐个put键值对。

2. 动态构建请求

直接通过变量从映射表中获取方法引用,链式完成请求构建:

// 从映射表中获取对应方法,无匹配时抛出异常(或替换为getOrDefault设置默认方法)
Function<String, SimpleRequestBuilder> requestBuilder = HTTP_METHOD_MAP.get(some_variable);
if (requestBuilder == null) {
    throw new IllegalArgumentException("不支持的HTTP方法: " + some_variable);
}

SimpleHttpRequest http_request = requestBuilder.apply(uri)
    .setBody(request_body)
    .setHeaders(request_headers)
    .build();

精简版(带默认方法)

如果想省略空判断,可直接用getOrDefault指定默认方法(比如默认用GET):

SimpleHttpRequest http_request = HTTP_METHOD_MAP.getOrDefault(some_variable, SimpleRequestBuilder::get)
    .apply(uri)
    .setBody(request_body)
    .setHeaders(request_headers)
    .build();

优势

  • 无需修改业务代码,新增HTTP方法只需在映射表中添加一行配置
  • 代码逻辑清晰,完全消除分支判断
  • 符合开闭原则,扩展成本极低

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 18:47:17