我听说返回null
是不正确的做法。
在这种情况下,返回null
的替代方法是什么?
public RollingStock getHeadPoint() {
if (!train.isEmpty()) {
return train.get(0);
} else {
return null;
}
}
答案 0 :(得分: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 :(得分:0)
您应区分“ get
”和“ search/find
”方法:
getHeadPoint
:应该存在一些火车。如果不是,那是对您的生意不利,请抛出异常findHeadPoint
:不存在与您的业务相关的火车,返回null 答案 2 :(得分:0)
您可以定义TrainIsEmptyException并在火车为空时抛出该异常。使其成为选中的异常。或者您可以只返回null。