带有 Optional 的三元运算符中不需要的空指针异常



据我了解,以下代码不应该抛出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中,从而强制执行的orElsenull

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(。

相关内容

最新更新