我的代码片段:
WebClient webClient;
if (logger.isDebugEnabled()) {
webClient = WebClient.builder() //
.baseUrl(eprBaseUrl) //
.codecs(codecConfigurer -> {
codecConfigurer.defaultCodecs().jackson2JsonEncoder(loggingEncoder);
}) //
.build();
} else {
webClient = WebClient.builder() //
.baseUrl(eprBaseUrl) //
.build();
}
是否有更好/更有效的方法来写这个块没有条件阻塞(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();
那么分支与else的区别在于调用了一个额外的codecs
方法。这将驱动可用选项:
-
如果您想保持单一表达式,检查
null
是可能传递到codecs
。如果是,则使用条件表达式as对codecs
的论证:.codecs(logger.isDebugEnabled() ? /*logging codec*/ : null)
-
如果你没有单一的表达或第一选项是不高兴可能的,你还可以提取额外的部分,让普通零件:
WebClient.Builder builder = WebClient.builder() // .baseUrl(eprBaseUrl); if(logger.isDebugEnabled()) builder.codecs(/*logging codec*/); webClient = builder.build();