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));
也就是说,我不确定这是Optional
s 的一个很好的用例。
守着一只汪
TA贡献1872条经验 获得超3个赞
我最好将三元运算符用作:
return (returnValue != null) ? returnValue : ((elseCondition != null) ? elseCondition.getValue() : null);
将条件分支成型为链式Optional
s 听起来对他们不利。
万千封印
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);
添加回答
举报
0/150
提交
取消