gpt4 book ai didi

java - 为什么这会给我带来堆栈溢出错误?

转载 作者:行者123 更新时间:2023-12-02 00:52:37 28 4
gpt4 key购买 nike

以下代码产生堆栈溢出错误,有人可以告诉我为什么吗?(如果我在 add 方法中引用“super”而不是“this”,我知道如何修复错误,但我不确定为什么会这样。)

package subclassingVector;

import java.util.Vector;

public class MyVectorSubclass extends Vector<MyModelClass> {

public MyVectorSubclass(){
MyModelClass m = new MyModelClass();
m.setId(2);
this.add(m);
if(this.contains(m)){
System.out.println("contains is true");
}
}


public boolean add(MyModelClass o){
this.add(o);
return true;
}

public boolean contains(Object o){
for(subclassingVector.MyModelClass mmc: this){
if(mmc.equals((MyModelClass) o)){
return true;

}
}
return false;
}


public static void main(String[] args) {

String s = new String("SSEE");
MyVectorSubclass m = new MyVectorSubclass();

}

public class MyModelClass {

private Integer id = null;

public MyModelClass() {
// TODO Auto-generated constructor stub
}

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

}

}

最佳答案

此代码永远调用自身,因此出现 StackOverflowError:

public boolean add(MyModelClass o){
this.add(o);
return true;
}

this 表示正在调用当前方法的对象的实例。事实上,上面的代码,在这种情况下,与以下内容完全相同:

public boolean add(MyModelClass o){
add(o);
return true;
}

这段代码做了完全不同的事情:

public boolean add(MyModelClass o){
super.add(o);
return true;
}

这不会进行递归调用。这只是调用基类中 add() 的实现。

Cory Kendall 对这个问题的评论非常有值(value):

If you get a StackOverflowError, looking at the stack trace of the Error should be informative; walk through the logic using the given line numbers.

异常的堆栈跟踪可以为您提供有关问题根源的大量有用信息。在这种情况下,堆栈跟踪将清楚地显示 MyVectorSubClass.add()this.add(o) 的情况下重复调用自身。

我建议看一下:

关于java - 为什么这会给我带来堆栈溢出错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18283850/

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