常见如果代码其他代码java编程实践

时间:2018-02-20 09:41:44

标签: java java-8

我在很多地方重复了以下代码。我想知道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;

3 个答案:

答案 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.
                });