gpt4 book ai didi

java - 将 Null-Object 拆箱为原始类型会导致 NullPointerException,可以吗?

转载 作者:太空宇宙 更新时间:2023-11-04 11:39:03 25 4
gpt4 key购买 nike

此代码片段会抛出 NullPointerException,因为它被拆箱为原始类型并且调用了 Long.longValue(),对吗?

如果你有这样的代码片段,那就更容易看出:

long value = (Long) null;

但是在像这样的更复杂的情况下,NullPointerException 更难出现:

long propertyValue = (Long) obj.getProperty(propertyModel.getName());

那么 Java 编译器是否有可能从中产生更舒适的异常?我更喜欢带有类似消息的 IllegalArgumentException “您正在尝试将 null 对象转换为原始类型,这是无法完成的!”

这样不是更合适吗?你怎么认为?这在运行时是否可能?我们能确定这个 Actor 阵容吗?我还没看过java字节码。也许它可以用于解决方案。

这个问题可以回答:我想知道是否可以实现这种行为!

最佳答案

根据Java language specification ,通过调用 Number.longValue()Number.intValue() 等进行拆箱。没有发生特殊的字节码魔法,它与手动调用这些方法完全相同。因此,NullPointerException 是拆箱 null 的自然结果(实际上是 JLS 强制要求的)。

抛出不同的异常需要在每次拆箱转换期间检查null两次(一次是为了确定是否抛出特殊异常,另一次是在实际调用方法时隐式检查)。我想语言设计者认为它没有足够的用处来保证这一点。

关于java - 将 Null-Object 拆箱为原始类型会导致 NullPointerException,可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42979199/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com