如何不使用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
相关产品推荐
相关产品推荐

