Optional.ofNullableorElse抛出NPE
我一直在使用此代码:
Event rEvent = new Event();
Map<Long, Message> msgMap = getMsg();
Message msg = msgMap.get(rEvent.getMsgId());
Long id = Optional.ofNullable(rEvent.getPkId()).orElse(msg.getPkId());
假设rEvent.getPkId()和 msg 都是null。所以Optional.ofNullable(rEvent.getPkId())会被跳过,然后orElse被执行。这里抛出NPE. 如何使用Optional.ofNullable多个空检查重新编码?
回答
在你的情况下,我会简单地使用一个简单的 if else:
Long id = null; // default value
if(rEvent.getPkId() != null) {
id = rEvent.getPkId();
} else if(msg != null){
id = msg.getPkId();
}
但是,如果你想练Optional,在这种情况下,你需要另一个Optional为msg:
Long message = Optional.ofNullable(msg)
.map(Message::getPkId)
.orElse(null);// default value OR:
//.orElseThrow(() -> new IllegalArgumentException("Pk Id shouldn't be null."))
Long id = Optional.ofNullable(rEvent.getPkId()).orElse(message);