猿问

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

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 null


class ElseCodnition {

    private  String value;


    getValue() {...}

}


慕无忌1623718
浏览 182回答 3
3回答

冉冉说

elseCondition也应该用一个包裹Optional:Optional.ofNullable(returnValue)         .orElse(Optional.ofNullable(elseCondition)                         .map(ElseCodnition::getValue)                         .orElse(null));也就是说,我不确定这是Optionals 的一个很好的用例。

守着一只汪

我最好将三元运算符用作:return (returnValue != null) ? returnValue :          ((elseCondition != null) ? elseCondition.getValue() : null);将条件分支成型为链式Optionals 听起来对他们不利。

万千封印

这当然不是工作Optional,相反,您可以创建一个调用对象 getter 避免 NPE 的方法:static <T, R> R applyIfNotNull(T obj, Function<T, R> function) {&nbsp; &nbsp; return obj != null ? function.apply(obj) : null;}和用例return returnValue != null ? returnValue : applyIfNotNull(elseCondition, ElseCondition::getValue);
随时随地看视频慕课网APP

相关分类

Java
我要回答