gpt4 book ai didi

java - 这是一个错误吗? (Java 中的递归构造函数)

转载 作者:行者123 更新时间:2023-11-29 06:34:46 25 4
gpt4 key购买 nike

我一直在研究 Java 中的递归构造函数。下面的类是Java中被编译器接受的递归构造函数的两个例子。它在运行时使用 java 1.7.0_25 和 Eclipse Juno(版本:Juno Service Release 2 Build id:20130225-0426)崩溃并出现 StackOverflowError。

  class MyList<X> {
public X hd;
public MyList<X> tl;

public MyList(){
this.hd = null;
this.tl = new MyList<X>();
}
}

错误信息是有道理的,但我想知道编译器是否应该捕捉到它。一个反例可能是一个整数列表,其构造函数将 int 作为参数,如果参数小于零,则将 this.tl 设置为 null。以允许递归方法的相同方式允许似乎是合理的,但另一方面我认为构造函数应该终止。是否应该允许构造函数调用自身?

所以我在提交 Java 错误报告之前先询问了更高的权限。

编辑:我提倡进行简单检查,例如禁止构造函数调用自身或 Java 开发人员为解决 https://bugs.openjdk.java.net/browse/JDK-1229458 所做的任何事情。 .一个更大胆的解决方案是检查递归构造函数调用的参数是否相对于某些有根据的关系正在减少,但问题的重点不是“Java 是否应该确定所有构造函数是否终止?”而是“Java 在编译构造函数时是否应该使用更强的启发式算法?”。

最佳答案

您甚至可以拥有多个具有不同参数的构造函数,通过 this(...) 相互调用。一般来说,根据计算机科学,不能总是保证代码的终止。一些智能,就像在这个简单的例子中,会很好,但可能不需要编译器错误。 有点像无法访问的代码。但是在我看来,构造函数和普通方法之间没有区别。

关于java - 这是一个错误吗? (Java 中的递归构造函数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23175806/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com