gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 20:51:06 29 4
gpt4 key购买 nike

这个片段抛出了一个 NullPointerException,因为它被拆箱为原始类型并且调用了 Long.longValue(),对吧?

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

long value = (Long) null;

但是 NullPointerException 在像这样的更复杂的情况下更难得到:

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

那么,Java 编译器是否有可能从中制作出更舒适的异常?我希望 IllegalArgumentException 带有类似 “您正在尝试将 null-Object 转换为原始类型,这无法完成!”之类的消息!

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

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

最佳答案

根据Java language specification , 拆箱通过调用 Number.longValue()Number.intValue() 等发生。没有特殊的字节码魔术发生,它与调用完全一样这些方法手动。因此,NullPointerException 是对 null 拆箱的自然结果(实际上是 JLS 规定的)。

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

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

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