我在很多地方重复了以下代码。我想知道Java中是否存在通过使用接口/功能接口/抽象类来定义此类重复代码的常见做法。 if的内部逻辑是不同的,但是if if和log对所有人都是相同的。
Optional<ABC> factory = factoryResolver.resolve(XYZ);
if (factory.isPresent()) {
// Logic varies here
return X;
} else {
LOGGER.error("Some logs");
}
return Y;
答案 0 :(得分:1)
您正在做的事情与使用null
检查完全没有区别,但其方式更加不透明和冗长。
更面向对象的解决方案是利用多态性。而不是返回Optional<ABC>
,而是直接返回ABC
。如果ABC
无法解析XYZ
,则可以返回UnresolvedABC
类,该类以有意义的方式实现ABC
接口(例如抛出异常或记录错误)
有关详情,请参阅Null Design Pattern(维基百科)
答案 1 :(得分:1)
如果使用Optional.orElseGet
,则可以取消 Optional<ABC> factory = factoryResolver.resolve(XYZ);
return factory.map((abc) -> X).orElseGet(() -> {
LOGGER.error("Some logs");
return Y;
});
答案 2 :(得分:0)
你不应该在这里创建local variable
,它没用。
factoryResolver.resolve(XYZ)
.map(x -> X) //Your logic
.orElseGet(() -> {
LOGGER.error("Some logs");
return Y.
});