有没有更优雅的方式来编写这个构建器?
is there a more elegant way to code this builder?
这是我的代码片段
WebClient webClient;
if (logger.isDebugEnabled()) {
webClient = WebClient.builder() //
.baseUrl(eprBaseUrl) //
.codecs(codecConfigurer -> {
codecConfigurer.defaultCodecs().jackson2JsonEncoder(loggingEncoder);
}) //
.build();
} else {
webClient = WebClient.builder() //
.baseUrl(eprBaseUrl) //
.build();
}
我的问题很快暴露了:
有没有 better/more 有效的方法来写这个块
没有条件块 (if/else)
提前致谢
您可以像这样提取相关部分:
WebClient.Builder webClientBuilder = WebClient.builder().baseUrl(eprBaseUrl);
if (logger.isDebugEnabled()) {
webClientBuilder.codecs(codecConfigurer -> {
codecConfigurer.defaultCodecs().jackson2JsonEncoder(loggingEncoder);
});
}
WebClient webClient = webClientBuilder.build();
您可以初始化您的构建器直到 if 块并仅将 .codecs 设置到 if 部分:
WebClient.Builder webClientBuilder = WebClient.builder();
if (logger.isDebugEnabled()) {
webClientBuilder
.codecs(codecConfigurer -> {
codecConfigurer.defaultCodecs().jackson2JsonEncoder(loggingEncoder);
});
}
webClientBuilder
.baseUrl(eprBaseUrl)
.build();
Then 分支与 else 的不同之处在于调用了一个额外的 codecs
方法。此驱动器可用选项:
如果你想保持单一表达式,检查 null
是否是
可以传递给 codecs
。如果是,则使用条件表达式作为
codecs
的参数:
.codecs(logger.isDebugEnabled() ? /*logging codec*/ : null)
如果你开心没有单一表情或者第一个选项不是
可能的话,你仍然可以提取额外的部分并让 common
部分在一起:
WebClient.Builder builder = WebClient.builder() //
.baseUrl(eprBaseUrl);
if(logger.isDebugEnabled())
builder.codecs(/*logging codec*/);
webClient = builder.build();
这是我的代码片段
WebClient webClient;
if (logger.isDebugEnabled()) {
webClient = WebClient.builder() //
.baseUrl(eprBaseUrl) //
.codecs(codecConfigurer -> {
codecConfigurer.defaultCodecs().jackson2JsonEncoder(loggingEncoder);
}) //
.build();
} else {
webClient = WebClient.builder() //
.baseUrl(eprBaseUrl) //
.build();
}
我的问题很快暴露了: 有没有 better/more 有效的方法来写这个块 没有条件块 (if/else)
提前致谢
您可以像这样提取相关部分:
WebClient.Builder webClientBuilder = WebClient.builder().baseUrl(eprBaseUrl);
if (logger.isDebugEnabled()) {
webClientBuilder.codecs(codecConfigurer -> {
codecConfigurer.defaultCodecs().jackson2JsonEncoder(loggingEncoder);
});
}
WebClient webClient = webClientBuilder.build();
您可以初始化您的构建器直到 if 块并仅将 .codecs 设置到 if 部分:
WebClient.Builder webClientBuilder = WebClient.builder();
if (logger.isDebugEnabled()) {
webClientBuilder
.codecs(codecConfigurer -> {
codecConfigurer.defaultCodecs().jackson2JsonEncoder(loggingEncoder);
});
}
webClientBuilder
.baseUrl(eprBaseUrl)
.build();
Then 分支与 else 的不同之处在于调用了一个额外的 codecs
方法。此驱动器可用选项:
如果你想保持单一表达式,检查
null
是否是 可以传递给codecs
。如果是,则使用条件表达式作为codecs
的参数:.codecs(logger.isDebugEnabled() ? /*logging codec*/ : null)
如果你开心没有单一表情或者第一个选项不是 可能的话,你仍然可以提取额外的部分并让 common 部分在一起:
WebClient.Builder builder = WebClient.builder() // .baseUrl(eprBaseUrl); if(logger.isDebugEnabled()) builder.codecs(/*logging codec*/); webClient = builder.build();