我如何修改下面的代码,使其执行由“some_variable”表示的方法,而不仅仅是“get(uri)”,而不使用case语句?
SimpleHttpRequest http_request = SimpleRequestBuilder.get(uri)
.setBody(request_body)
.setHeaders(request_headers)
.build();
例如,假设String some_variable = "post";
,我希望我的程序执行以下操作:
SimpleHttpRequest http_request = SimpleRequestBuilder.post(uri)
.setBody(request_body)
.setHeaders(request_headers)
.build()
因为我想尽可能地减少代码,所以我不想使用if语句或case语句,SimpleRequestBuilder
调用应该动态地改变,不管some_variable
包含什么值。
2条答案
按热度按时间wswtfjt71#
您可以避免使用
if
或switch
语句,但它不会在任何显著程度上“最小化”您的代码。例如,以下方法使用函数引用:
但这或多或少相当于一个
switch
语句或一串if
语句。而且...更复杂,IMO。无论
some_variable
包含什么值,SimpleRequestBuilder
调用都应该动态更改。在可能的范围内,上面的
Map
方法做到了这一点。但问题是,如果method_mapping
没有特定方法字符串的条目,那么没有方案能够处理这一点。(The代码应该真正测试
method_mapping.get(method)
在尝试调用它之前返回非空函数引用。下面是一个使用Java 12+
switch
表达式的版本:其中
DummyBuilder::error405
处理不支持的方法的情况。lmvvr0a82#
您可以使用反射,但它不会很优雅。
您可以通过首先创建请求,然后应用通用代码来最小化代码: