构造函数什么时候抛出异常是正确的?

2023-12-21

构造函数什么时候抛出异常是正确的? (或者就 Objective C 而言:初始化器什么时候返回 nil 是正确的?)

在我看来,如果对象不完整,构造函数应该失败,从而拒绝创建对象。即,构造函数应该与其调用者签订合同,以提供一个功能性和工作对象,可以在其上有意义地调用方法?这合理吗?


构造函数的工作是使对象进入可用状态。对此基本上有两种思想流派。

一组赞成两阶段建设。构造函数只是将对象带入休眠状态,在该状态下它拒绝执行任何工作。还有一个附加函数可以执行实际的初始化。

我一直不明白这种方法背后的原因。我坚定地支持一阶段构造,其中对象在构造后完全初始化并可用。

如果单阶段构造函数未能完全初始化对象,则应抛出异常。如果对象无法初始化,则一定不允许它存在,因此构造函数必须抛出异常。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

构造函数什么时候抛出异常是正确的? 的相关文章

随机推荐

  • Visual Studio Code 需要显式清理和构建

    所以 我是一个老派的 Visual Studio 用户 刚刚迁移到 Visual Studio Code 我认为我在这里遗漏了一些东西 不过 我将解释一下我在这里所经历的事情 使用 Visual Studio 我始终可以右键单击解决方案并重
  • Globbing 不适用于 Minitest - 仅运行一个文件

    我已将所有规格放入specs rb 但是 当我运行 Minitest 时ruby spec spec rb 仅运行一个文件 是什么赋予了 这不是 Minitest 特定的 而是 Ruby 的 您实际上正在运行一个 ruby 程序 它对正在运
  • 识别多个意图(针对 onActivityResult)

    我在一项活动中有 5 个意图 他们都在使用startActivityForResult 因为它们都要对应布局中的不同元素 我如何识别哪个意图是结果 例如如果我有意图1 意图2 意图3 它们都在使用startActivityForResult
  • 为什么在方法中抛出一般异常是不好的? [复制]

    这个问题在这里已经有答案了 为什么在 Java 中通过方法抛出一般异常是一种不好的做法 class Test public void ex throws Exception some code throwing for eg Illegal
  • 如何为 IE11 内联 Rollup/Babel polyfill

    我已经在 PHP 项目上工作了一段时间 客户在最后一刻要求提供 IE11 支持 我可以处理 HTML CSS 问题 但我的 javascript 是用现代语法编写的 因此 我安装了 Node 使用 JavaScript 在第一次需要时通过
  • 通过公共分隔符解析 javascript 中的字符串

    在 javascript 中 我有一个 john smith 形式的字符串 我想获取数组 名字 约翰 姓氏 史密斯 js 是否有一些简单的函数可以根据分隔符解析该字符串 我没有看到任何结果 谷歌除了做了一些正则表达式之外什么也没返回 var
  • 如何在ListView内的Button上setOnclickListener()?

    在应用程序中 我有一个 Listactivity 它有一个带有 TextView 和 Button 标记为删除 的适配器 现在我想删除相应的按钮点击项目 请检查代码并提出建议 public class MySimpleArrayAdapte
  • Flutter Socket io WebSocketException 上出现错误:连接未升级为 websocket

    I use this https pub dev packages socket io client包并且它在测试网站上正常工作 但在应用程序中我收到此错误 WebSocketException Connection to https so
  • Azure 数据传输身份列种子跃升 10,000

    通过sql脚本插入数据后 那有 SET IDENTITY INSERT dbo table ON SET IDENTITY INSERT dbo table OFF 身份种子增加10000 我尝试过运行重新种子 dbcc CHECKIDEN
  • 如何计算两个值以任意顺序出现在两列中的次数

    可以说 我们有这张表 COL1 COL2 A B B A C D 我也想数一下次数letter1 letter2 or letter2 letter1出现在两列中 我想要结果 COL1 COL2 COL3 A B 2 C D 1
  • RDFlib“磁盘上”存储

    经过 2 天的研究 我 一个新手 仍然无法弄清楚 RDFFlib 3 1 0 中可用的 磁盘 存储 如果您有一个有效的示例 那就很高兴看到 对于我的应用程序 我更喜欢 SQLite 我不需要访问在线 RDF 商店 我想在 RDF 中存储有关
  • Apollo 服务器解析大数据时性能缓慢

    在解析大数据时 我注意到从解析器将结果返回给客户端的那一刻起 性能非常慢 我假设apollo server迭代我的结果并检查类型 无论哪种方式 操作都花费太长时间 在我的产品中 我必须一次性返回大量数据 因为它被一次性用于在 UI 中绘制图
  • 小行星类型游戏中的正确移动

    目前我有某种小行星游戏 可以在这里看到 http www youtube com watch v rQV6H9kWkFE http www youtube com watch v rQV6H9kWkFE 但是当用户在船舶仍在移动的情况下按W
  • Spark RDD 通过键查找

    我有一个从 HBase 转换而来的 RDD val hbaseRDD RDD String Array String 其中 tuple 1 是行键 数组是HBase中的值 4929101 ACTIVE 4929101 2015 05 20
  • 构建 dist 文件夹并将其发布到 github 页面

    我使用 Vue CLI 使用 Vue js 和 Vuetify 创建了一个项目 我想使用 Github Pages 托管此应用程序 所以我从这里拿了一份指南 https help github com en articles configu
  • 为什么 webpack 配置必须使用 path.resolve 和 path.join

    在 webpack 配置中常见的是 当我们需要设置路径时 path resolve or path join经常使用 我只是想弄清楚why我们必须使用它们而不是普通的字符串路径 例如 dist 我部分理解也许出于某种目的 它们用于返回绝对路
  • 使用 CAShapeLayer 对象用 Bezierpath 绘制一条线

    我正在制作一个图像编辑器 它可以创建不同形状的对象 如圆形 三角形和正方形 也可以更新或删除 所以我用过CAShapeLayer用于创建形状对象 现在我还想在图像上画一条线 它也可以更新或删除 所以我使用了 bezierpath 和CASh
  • 奇怪的行为-选择行触摸没有响应 UITableViewCell

    我有一个非常奇怪的问题 我不知道这对细胞的正常行为是否很尴尬 似乎是这样 因此我将其交给可以回答的人 如果有任何愚蠢的事情 请道歉在问这个问题时 通常 当我们触摸表视图单元格时 会发生什么情况是它导航到视图控制器 编码的控制器 现在奇怪的是
  • Perl 的 rand 参数可以有多大?

    rand n 返回一个介于0 and n Will rand对于我的平台上达到整数限制的所有参数 就 随机性 而言 是否按预期工作 这将取决于你的randbits http www perl com doc FMTEYEWTK random
  • 构造函数什么时候抛出异常是正确的?

    构造函数什么时候抛出异常是正确的 或者就 Objective C 而言 初始化器什么时候返回 nil 是正确的 在我看来 如果对象不完整 构造函数应该失败 从而拒绝创建对象 即 构造函数应该与其调用者签订合同 以提供一个功能性和工作对象 可