这段代码抛出了一个NullPointerException
因为它被拆箱为原始类型并且Long.longValue()
叫做,对吗?
如果您有这样的片段,那就更容易看出:
long value = (Long) null;
But the NullPointerException
在这样更复杂的情况下就更难了:
long propertyValue = (Long) obj.getProperty(propertyModel.getName());
那么 Java 编译器是否有可能从中产生更舒适的异常呢?我更喜欢一个IllegalArgumentException
带有类似的消息“你试图将空对象转换为原始类型,这是不可能的!”
这样不是更合适吗?你怎么认为?这在运行时是否可能?我们能确定这个演员阵容吗?我还没看过java字节码。也许它可以用于解决方案。
这个问题可以回答:我想知道是否可以实现这种行为!
根据Java语言规范,通过调用进行拆箱Number.longValue()
, Number.intValue()
等等。没有发生特殊的字节码魔法,它与手动调用这些方法完全相同。就这样NullPointerException
是拆箱的自然结果null
(实际上是 JLS 强制要求的)。
抛出不同的异常需要检查null
twice在每次拆箱转换期间(一次确定是否抛出特殊异常,一次在实际调用方法时隐式进行)。我想语言设计者认为它没有足够的用处来保证这一点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)