Chr*_*wes 38 java nullpointerexception
这个片段引发了一个NullPointerException事实,即它被取消装入原始类型并被Long.longValue()调用,对吧?
如果你有一个这样的片段,这很容易看出来:
long value = (Long) null;
Run Code Online (Sandbox Code Playgroud)
但是NullPointerException更难以进入这样一个更复杂的情况:
long propertyValue = (Long) obj.getProperty(propertyModel.getName());
Run Code Online (Sandbox Code Playgroud)
因此,Java编译器是否有可能使这个更加舒适?我希望IllegalArgumentException有一条消息,比如"你正在尝试将null-Object转换为基本类型,这是不可能的!"
这不是更合适吗?你怎么看?这甚至可以在运行时?我们能够确定这个演员吗?我还没有看过java字节码.也许它可以用在解决方案中.
这个问题可以回答:我想知道是否有可能实现这种行为!
Mic*_*rdt 72
按照Java语言规范,拆箱通过调用发生Number.longValue(),Number.intValue()等没有特殊的字节码的魔法发生的事情,这是完全一样的,如果你手动调用这些方法.因此,这NullPointerException是取消装箱的自然结果null(实际上是由JLS强制要求).
抛出一个不同的异常需要在每次拆箱转换期间检查null 两次(一次确定是否抛出特殊异常,一次隐式实际调用该方法).我想语言设计师并不认为这有用.
olu*_*ies 13
从Java 8 SE开始,还有Optional.ofNullable
long value = Optional.ofNullable(obj.getProperty(propertyModel.getName())).orElse(0L)));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
33005 次 |
| 最近记录: |