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

2023-12-01

这段代码抛出了一个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(使用前将#替换为@)

将 Null-Object 拆箱为原始类型会导致 NullPointerException,可以吗? 的相关文章

随机推荐

  • DataSnap XE2 和 TStream 方法参数

    我正在 Delphi XE2 中使用 TCP IP 协议开发 DataSnap 项目 该项目需要将二进制数据流作为方法参数传递到服务器 我遇到的问题是流内容似乎有大约 32 KB 的大小限制 超出此限制 服务器接收到的流为空 如果我传递其他
  • 使用经典 ASP 从 COM 对象检索字符串数组

    我有一个 NET 类 它包含通过访问器方法可用的简单字符串数组 如下所示 namespace Foo Bar ComVisible true Guid 642279A0 85D4 4c7a AEF5 A9FAA4BE85E5 public
  • hibernate.enable_lazy_load_no_trans 不起作用

    我正在使用 JPA2 1 和 hibernate 4 3 8 并且我已配置 persistence xml 以允许延迟加载 我已经添加了
  • 3D Touch 冻结我的应用程序

    也许我的问题等于 如果轻轻触摸 力触动画会冻结 iPhone 6s 中的 peek and pop 实施中应用程序冻结 1 无 bug 的强制触摸 一个UITransitionView创建图层是为了预览我的视图控制器 它工作完美 2 用 b
  • 一个函数在内存中只存储一次吗?

    当我们在对象或全局中的任何地方定义函数时 javascript函数是否会存储在内存中一次 function alert some value obj m function alert some value 如果您定义该函数一次 并将该函数的
  • Dataproc Hive 操作员未运行存储桶中存储的 hql 文件

    我正在尝试使用气流脚本运行云存储中存在的 hql 文件 我们可以通过两个参数将路径传递给 DataprocHiveOperator 查询 gs bucketpath filename q Error occuring cannot reco
  • 如何在Android 11中调整手机屏幕中的应用程序?

    在 Android 11 之前 我已经轻松地将我的应用调整为全屏 我的旧手机的摄像头孔和基本按钮位于屏幕区域之外 我的新手机的摄像头孔和基本按钮位于屏幕区域内 经过很少的设置 我的应用程序在旧手机上全屏显示 样式 xml
  • 用分号连接字符串数组

    这是一种经常出现在我们框架的一部分中的模式 给定一个字符串数组 我们必须将所有字符串连接起来 并用分号分隔 我想知道可以用哪种优雅的方式来完成 我在我们的代码库中看到了一些变化 而且当我必须这样做时 我总是必须再次重新考虑 我目前的模式是这
  • AVUrlAsset 和 WebVTT

    在 iOS TVOS 上 是否可以从 URL 加载远程 vtt 文件并将其用作字幕轨道 同时还从 URL 加载远程 HLS 视频 而不是在 m3u8 播放列表中指定的 VTT 伪代码 AVAsset video asset AVAsset
  • 如何在编辑表单中使用 DoctrineModule\Validator\NoObjectExists - Zend Framework 2 和 Doctrine 2

    最有效的使用方法是什么DoctrineModule Validator NoObjectExistsZend Form 中的验证器也用于编辑 因为当我使用相同的表单来保存编辑的值时 这会验证对象存在并标记表单无效 几周前 我在自定义过滤器中
  • 使用 ssl 加密创建 idhttpserver

    我还不擅长使用 delphi 但是根据一些示例 我已经成功创建了不超过 10 个用户的简单 http 服务器 有两个主要问题我还不知道如何解决 验证 管理用户的正确方法 会话 主要问题是 连接必须安全 所以需要SSL加密 如何实现 我发现的
  • Mac OSx 上的 OpenCL 内核错误

    我编写了一些 OpenCL 代码 该代码在 LINUX 上运行良好 但在 Mac OSX 上失败并出现错误 有人可以帮我确定为什么会发生这些情况吗 错误后显示内核代码 我的内核使用 double 所以我在顶部有相应的编译指示 但我不知道为什
  • 样条图平滑拐角

    我在我的项目中使用 NET 框架中的图表控件 我已将图表控件添加到表单中并进行配置 如下所示 Add a new series chart1 Series Add 1 var series chart1 Series 0 series Ch
  • CDI 事件观察器处理服务器崩溃和重新启动

    我正在尝试使用服务将一个项目持久保存在数据库中 并为后续服务触发 JMS 消息以获取持久保存的项目 以便它可以处理相同的项目 此特定操作发生在单个事务中 但由于有时存在竞争条件 第二个服务无法获取相应的项目 因为它尚未持久化 我的用例非常常
  • 如何根据每次提交的日期将两个分支合并为一个分支?

    假设我有一个 git 存储库 如下所示 merge base A1 A2 A3 A4 branchA B1 B2 branchB 为了让事情变得更简单 假设分支上的提交是对 fileA 的严格修改 而分支上的提交是对 fileB 的严格修改
  • 如何一致地展平 numpy 数组?

    from numpy import array eye matrix x array 1 0 A eye 2 print A dot x prints 1 0 另一方面 B matrix 1 0 0 1 print B dot x prin
  • Google Chrome 扩展:主网页中的dispatchevent

    我的扩展内容脚本中有 从内容脚本中 我尝试在主网页上调度事件 但事件没有发送 什么也没有 为了更加确定 我在所有元素中分派事件 each function i entity console log entity entity trigger
  • c将不同长度的向量绑定到数据帧

    我有一个由两个样本组成的数据框 只有一个样本回答了有关状态焦虑的调查问卷 对于这种情况 我使用以下函数 rowSums 计算了躯体状态焦虑的向量 som lp lt rowSums sample1 c 1 7 8 10 108 na rm
  • 导入模块在 Jupyter Notebook 中有效,但在 IDLE 中无效

    我不明白我做错了什么 我上周重新安装了 Windows 之后我得到了 python 3 6 和我需要的所有库 但是当我尝试在 IDLE 中导入它们时返回错误 ModuleNotFoundError 没有名为 的模块 并且当我使用 pip 在
  • 将 Null-Object 拆箱为原始类型会导致 NullPointerException,可以吗?

    这段代码抛出了一个NullPointerException因为它被拆箱为原始类型并且Long longValue 叫做 对吗 如果您有这样的片段 那就更容易看出 long value Long null But the NullPointe