我有一个可为null的对象,如果该对象不是null
并且不满足条件,我将尝试抛出异常。
我用Optional
:试试这种方法
Optional.ofNullable(nullableObject)
.filter(object -> "A".equals(object.getStatus()))
.orElseThrow(() -> new BusinessUncheckedException("exception message"));
当对象不是null
时,它可以按照我的意愿工作,但除此之外,它也会抛出异常(我不希望这样(。
有没有一种方法可以使用Optional
或其他不使用if object != null
的方法?
假设您没有对返回的对象执行任何操作,则可以使用ifPresent
并传递Consumer
nullableObject.ifPresent(obj -> {
if (!"A".equals(obj.getStatus())) {
throw new BusinessUncheckedException("exception message");
}
});
注意:正如@Pshemo在评论中提到的,Consumer
功能接口的合约只允许抛出RuntimeException。
否则,您最好使用if检查,如您所述。
IMO,在Optional上使用filter
进行此类检查不是那么可读/直观。我更喜欢
if (obj != null && !"A".equals(obj.getStatus())) {
throw new BusinessUncheckedException("exception message");
}
如果map
为null,则Optional变为空:
Optional.ofNullable(nullableObject)
.map(object -> "A".equals(object.getStatus()) ? object : null)
.ifPresent(object -> { throw new BusinessUncheckedException("exception message"); });