允许递归构造函数可能有什么好处(如果有)?

2024-01-25

在 Java 中,构造函数不能是递归的。编译时错误:“递归构造函数调用”。假设我们没有这个限制。

要记住的事情:

  • 构造函数的返回类型为 void。由于它是一个 void 方法,因此您无法利用递归的完整功能。
  • 构造函数可以使用 this() 调用自身(或任何其他构造函数)。但是“对此的调用必须是构造函数中的第一个语句”
  • 我们可以在连续调用之间使用非本地数据,以便仍然从递归构造函数中获得一些可能的收益。

允许递归构造函数会有什么好处吗?


构造函数(当它们互相调用时)就像返回的方法void。因此,它们产生结果的唯一方法是副作用。然后,这仅限于改变它们正在构造的对象或改变作为参数传入的值。后者在构造函数中是一个非常令人讨厌的想法;构造函数通常从其参数中获取信息而不改变它们。

因此,改变正在构造的对象是唯一的选择,以便有任何方法可以跟踪递归的进度,以便它最终终止。很难看出它比普通构造函数中的简单循环更容易编写、更清晰阅读等。

调用另一个构造函数(使用this)在构造函数中当然与使用new构造函数内的表达式:

class Node
{
    Node _left, _right;

    public Node(Node left, Node right)
    {
        _left = left != null ? new Node(left._left, left._right) : null;
        _right = right != null ? new Node(right._left, right._right) : null;
    }
}

这里的Node构造函数调用自身,但是通过一个新的表达方式。这是关键的区别。 Anew表达式产生一个值,因此这纯粹是“函数式”、非变异的东西,并提供了一种方便的方法来制作节点树的深层副本。

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

允许递归构造函数可能有什么好处(如果有)? 的相关文章

随机推荐

  • 如何在多行文本框中添加文本?

    我必须将文件的详细信息添加到多行文本框中 但所有详细信息都添加在文本框中的一行中 而不是按垂直顺序添加 我使用了Environment NewLine 还使用了 r n 但它没有任何帮助 我已在 Windows 窗体表单中勾选了多行文本框
  • Mysql 函数 MBRContains 不准确

    我有以下多边形 在图像中您可以看到它覆盖的区域 POLYGON 74 05100448502202 4 7239278424321 74 05092938316898 4 7241416902206 74 04830618275201 4
  • 当字体不支持符号时如何将版权、商标、服务标记等插入到WPF文本框中

    我们有一个 WPF 应用程序 可以显示包含各种公司符号的文本 例如商标 注册商标 版权和服务标志 该数据库的一些字段包含标准公司符号 最初 数据标记如下 Example Corp TM or Example Plan SM 我们可以轻松地将
  • 编辑 Ionic 选项卡图标样式

    我正在开发一个 Ionic 项目 其中主要导航方法是选项卡 中心选项卡需要突出 所以我在我的 scss 中创建了一个样式 如下所示 i icon ion ios camera height inherit border radius 100
  • 将 CSV 导入 MySQL 表返回错误 #1148

    我尝试使用 DirectAdmin 导入 但在不使用 LOAD DATA 的情况下选择 CSV 时 我收到错误 第 1 行 CSV 输入中的字段计数无效 当我尝试使用 LOAD DATA 时 出现以下错误 1148 此 MySQL 版本不允
  • 将项目从 Delphi 7 迁移到 Delphi XE 有多难?

    我们公司有一个软件已经开发了10多年 所以里面有一些非常过时的东西 它仍然很实用 什么都有 但我看到 Delphi XE 上的新功能 它让我想要切换 问题是源代码本身有超过 300mb 的 pas 文件 包含组件等总共 1GB 我们使用自定
  • F# If/Then 中的推断类型

    如果我有以下功能 let myFunc x y if y 0 then 1 x 我收到错误 Program fs 58 17 error FS0001 This expression was expected to have type un
  • Powershell 连接到 VSO

    我正在尝试使用 Powershell 连接到 VSO 这是我的代码 tfsServer New Object System Uri the server is here creds System Net CredentialCache De
  • Python - calendar.timegm() 与 time.mktime()

    我似乎很难理解这个问题 有什么区别calendar timegm and time mktime 说我有一个datetime datetime如果没有附加 tzinfo 两者不应该给出相同的输出吗 它们不都给出纪元和作为参数传递的日期之间的
  • C++:固定但运行时定义长度数组的向量

    我知道我可以使用 std vector
  • 使用 Linq 从数据表中获取不同的行(多列不同)

    我试图区分多个列并从数据表中获取数据行 但出现错误 Dim query As IEnumerable Of DataRow From row As DataRow In SourceTable AsEnumerable Select row
  • C# 和元数据文件错误

    我使用 MSDN 上的教程创建了自己的小型 C 编译器 但它无法正常工作 我遇到一些错误 然后修复它们 然后我遇到新的 不同的错误 然后修复它们 等等 最新的错误真的让我很困惑 Line number 0 Error number CS00
  • CSS 覆盖规则和特殊性

    我经常对 CSS 覆盖规则感到困惑 一般来说 我意识到更具体的样式表会覆盖不太具体的样式表 并且特异性取决于指定的选择器数量 还有 important关键字 也发挥着作用 因此 这是一个简单的示例 我有一个包含两个表格单元格的表格 表格本身
  • sklearn的MLP Predict_proba函数内部是如何工作的?

    我想了解如何sklearn的 MLP 分类器 https scikit learn org stable modules generated sklearn neural network MLPClassifier html检索其结果pre
  • 将 png 图像转换为有损 avif

    我尝试压缩大约 1MB 的 png 以获得更小的图像 当我使用以下命令将图像压缩为 jpeg 时 for i in card png do convert resize 445x625 background white flatten i
  • Metro 应用程序中的 ListView 没有垂直滚动条

    我对 Windows Store 又名 Metro 应用程序 XAML 没有经验 所以也许我忽略了一些简单的东西 但根据书籍和示例 垂直滚动条是 ListView 控件的自然组成部分 除非明确禁用 否则会在出现时显示是 ListView 中
  • 获取画布中两点之间的距离

    我有画布绘图选项卡 并希望 lineWidth 基于最后两次鼠标移动坐标更新之间的距离 我将自己将距离转换为宽度 我只需要知道如何获得这些点之间的距离 我已经有了这些点的坐标 你可以用毕达哥拉斯定理来做 如果有两个点 x1 y1 和 x2
  • Python 和 Rust 之间零拷贝共享 Polars 数据帧的示例?

    我有一个Python函数 例如 def add data input df 对 input df Polars 数据框 进行一些操作 例如用新值填充某些列 我想在 Rust 函数中使用这个函数 input df 可能有几十兆字节大 所以我想
  • 使用 process.start 打开文本文件

    在计算皮尔逊相关并将结果写入文本文件后 我一直试图从系统中打开一个文本文件 但到目前为止 由于某种原因 代码没有打开任何记事本文件 我尝试打开其他文件 它们可以工作很好 但 txt 文件没有专门打开 甚至 docx 文件也使用相同的代码打开
  • 允许递归构造函数可能有什么好处(如果有)?

    在 Java 中 构造函数不能是递归的 编译时错误 递归构造函数调用 假设我们没有这个限制 要记住的事情 构造函数的返回类型为 void 由于它是一个 void 方法 因此您无法利用递归的完整功能 构造函数可以使用 this 调用自身 或任