为了账号安全,请及时绑定邮箱和手机立即绑定

java8 orElse(null.getValue()) 怎么处理

java8 orElse(null.getValue()) 怎么处理

慕无忌1623718 2022-10-07 17:02:40
elseCondition当当前它正在抛出时,这是否可以在一行中写入nullPointer在我的场景中,returnValue 是一个字符串,它为空。我想写的条件是if (returnValue != null) {    return returnValue;} else if (elseCondition != null) {    return elseCondition.getValue();} else {    return null;}Optional.ofNullable(returnValue).orElse(elseCondition.getValue()) //throws nullPointer as elseCondition is nullclass ElseCodnition {    private  String value;    getValue() {...}}
查看完整描述

3 回答

?
冉冉说

TA贡献1877条经验 获得超1个赞

elseCondition也应该用一个包裹Optional

Optional.ofNullable(returnValue)
        .orElse(Optional.ofNullable(elseCondition)
                        .map(ElseCodnition::getValue)
                        .orElse(null));

也就是说,我不确定这是Optionals 的一个很好的用例。


查看完整回答
反对 回复 2022-10-07
?
守着一只汪

TA贡献1872条经验 获得超3个赞

我最好将三元运算符用作:

return (returnValue != null) ? returnValue : 
        ((elseCondition != null) ? elseCondition.getValue() : null);

将条件分支成型为链式Optionals 听起来对他们不利。


查看完整回答
反对 回复 2022-10-07
?
万千封印

TA贡献1891条经验 获得超3个赞

这当然不是工作Optional,相反,您可以创建一个调用对象 getter 避免 NPE 的方法:


static <T, R> R applyIfNotNull(T obj, Function<T, R> function) {

    return obj != null ? function.apply(obj) : null;

}

和用例


return returnValue != null ? returnValue : applyIfNotNull(elseCondition, ElseCondition::getValue);


查看完整回答
反对 回复 2022-10-07
  • 3 回答
  • 0 关注
  • 181 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信