我应该返回什么而不是null? [关闭]

问题描述 投票:1回答:3

我听说返回null是不好的做法。

在这种情况下,返回null的替代方法有哪些?

    public RollingStock getHeadPoint() {
        if (!train.isEmpty()) {
            return train.get(0);
        } else {
            return null;
        }
    }
java collections java-8
3个回答
2
投票

恕我直言,最好的选择是返回Optional<RollingStock>,就像在箔纸上一样:

public Optional<RollingStock> getHeadPoint() {
    if (!train.isEmpty()) {
        // or even Optional.ofNullable, if you are not sure 
        // whether train.get(0) is null or not 
        return Optional.of(train.get(0));  
    } else {
        return Optional.empty();
    }
}

假设train是一个集合,作为将值手动包装到Optional中的替代方法,可以使用Stream API

public Optional<RollingStock> getHeadPoint() {
    return train.stream()
                .findFirst();
}

[在某些情况下,使用内联train.stream().findFirst()可能比将其包装为单独的方法更可取。


一旦您已经修改了方法getHeadPoint以返回Optional<RollingStock>,则可以按如下方式使用它:

// ...
RollingStock headPoint = getHeadPoint().orElse(yourDefaultRollingStock);
// or
RollingStock headPoint = getHeadPoint().orElseGet(aMethodGettingYourDefaultRollingStock());
// or
RollingStock headPoint = getHeadPoint().orElseThrow(() -> new Exception("The train is empty!"));
// or
getHeadPoint().ifPresent(headPoint -> doSomethingWithHeadPoint(headPoint));

1
投票

您应区分“ get”和“ search/find”方法:

  • getHeadPoint:应该存在一些火车。如果不是,则对您的业务不利,请抛出异常
  • findHeadPoint:不存在与您业务相关的火车,返回null

1
投票

您可以定义TrainIsEmptyException并在火车为空时抛出该异常。将其设置为选中的异常。或者,您可以只返回null。

© www.soinside.com 2019 - 2024. All rights reserved.