如果此代码中的签名,如何摆脱对 null 和 if-else 的检查?

how to get rid of checks for null and if-else if signature in this code?

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

    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);
    }

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

如何重写此代码以使其更清晰?

如何使用 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))));

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

我会这样写:

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