我有一段代码如下:
@Nullable SomeUrn someUrn = Optional.ofNullable(somePage)
.map(somePage::someEntity)
.map(entity -> {
if(entity.isMember()) {
return entity.getMember();
} else {
LOG.error("Expected a member but received " + entity);
return null;
}})
.orElse(null);
Java 8 中是否有更好的方法来处理异常?
我试过了
.map(entity ->
Optional.ofNullable(entity)
.map(ent -> ent.getMember())
.orElseGet(() -> {
LOG.error("Expected a member but received " + ent);
return null;
})
.orElse(null);
但是我丢失了要记录的实体,而且它比 if-else 更复杂
其中一个想法可能是尝试声明一个
Predicate<Entity
,例如
Predicate<Entity> loggingPredicate = entity -> {
if(entity.isMember()) {
return true;
} else {
// do something with the entity like logging
return false;
}
};
并进一步利用它,例如:
Optional.ofNullable(somePage)
.map(somePage::someEntity)
.filter(loggingPredicate)
.map(entity -> entity.getMember())
.orElse(null);