如何在该代码中消除对null和if-else-if签名的检查



我得到了复杂的对象响应。它看起来像这样:

class ComplexObject{
private PartOne partOne;
private PartTwo partTwo;
private PartThree partThree;
}

我需要处理这个回应。现在我这样做:

if (partOne!= null) {
processOne(partOne);
} else if (partTwo != null) {
processTwo(partTwo);
} else if (partThree != null) {
processThree(partThree);
}

但它看起来很糟糕。如果我能影响外部服务,我会添加枚举Status.PART_ONE, Status.PART_TWO, Status.PART_THREE,但我做不到。

如何重写此代码以使其更干净?

如果PartOnePartTwoPartThree不成为基类的一部分,则不能利用多态性
在这种情况下,您的实际方式是可以接受的权衡。

我会这样写:

if (partOne!= null) processOne(partOne);
else if (partTwo != null) processTwo(partTwo);
else if (partThree != null) processThree(partThree);

如何使用Java 8提供的java.util.Optional,如@ItFreak在评论中建议,您的代码看起来像

Optional.ofNullable(partOne).ifPresent(p -> processOne(p));
Optional.ofNullable(partTwo).ifPresent(p -> processTwo(partTwo));
Optional.ofNullable(partThree).ifPresent(p -> processThree(partThree));

如果你使用的是Java 9或更高版本,你可以做这个

Optional.ofNullable(partOne).ifPresentOrElse(p -> processOne(partOne),
() -> Optional.ofNullable(partTwo).ifPresentOrElse(p -> processTwo(partTwo), 
() ->  Optional.ofNullable(partThree).ifPresent(p -> processThree(partThree))));

最新更新