据我了解,以下代码不应该抛出Null Pointer exception
,因为我安全地使用可选接口。
但是,当我运行此代码时,它会抛出NPE
.
public class Test {
public static void main(String[] args) {
final Integer inte = false ? 0 : Optional.ofNullable((Integer) null).orElse(null);
}
}
如果我在代码中的某个地方弄错了,请告诉我,并帮助我纠正相同的问题。
您获得 NullPointerException 的原因是表达式false ? 0 : Optional.ofNullable((Integer) null).orElse(null)
的类型int
(通过 JLS 表 15.25-C(。
表达式的计算结果Optional.ofNullable((Integer) null).orElse(null)
为null
,将null
强制转换为int
会导致 NullPointerException。
你肯定会得到一个 NullPointerException,因为你的右手边只是一种非常冗长的null
说法。您将null
包装在Optional
中,从而强制执行的orElse
null
。
null
解析为int
的语句中,如 @Hoopje 所述(即使它被分配给Integer
变量(会导致NullPointerException
。
只需将null
包裹在Optional
中,再次打开包装时仍然会给您带来null
。
我找到了解决方法
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(。