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,在这种情况下,你需要另一个Optionalmsg

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);


以上是Optional.ofNullableorElse抛出NPE的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>