具有可选的三元运算符中的不需要的空指针异常

问题描述 投票:0回答:3

据我所知,以下代码不应抛出Null Pointer exception,因为我正在安全地使用Optional接口。

但是,当我运行这段代码时,它会抛出NPE

public class Test {
        public static void main(String[] args) {
            final Integer inte = false ? 0 : Optional.ofNullable((Integer) null).orElse(null);
         }
    }

请让我知道我是否在代码中的某个地方弄错了,并帮助我对其进行更正。

java java-8 optional
3个回答
6
投票

得到NullPointerException的原因是,表达式false ? 0 : Optional.ofNullable((Integer) null).orElse(null)的类型为int(根据表15.25-C的JLS表示。]

表达式Optional.ofNullable((Integer) null).orElse(null)的计算结果为null,而将null强制转换为int会导致NullPointerException。


2
投票

当然,您会得到一个NullPointerException,因为您的右手只是表达null的一种非常详尽的方式。您将null包裹在Optional中,从而强制执行的orElsenull。为int变量分配null将为您提供NullPointerException

仅将null包装在Optional中仍会在再次展开包装时为您提供null


2
投票

我找到了解决方法

 final Integer inte = false ? (Integer)0 : Optional.<Integer>ofNullable(null).orElse(null);

final Integer inte = false ? (Integer)0 : Optional.ofNullable((Integer)null).orElse(null);

三元运算符返回的类型应为int(因为文字为0)。

© www.soinside.com 2019 - 2024. All rights reserved.