在 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(使用前将#替换为@)