Java 为什么这会给我提供堆栈溢出错误?
下面的代码产生堆栈溢出错误,有人能告诉我为什么吗? (如果我在Java 为什么这会给我提供堆栈溢出错误?,java,stack-overflow,Java,Stack Overflow,下面的代码产生堆栈溢出错误,有人能告诉我为什么吗? (如果我在add方法中引用'super'而不是'this',我知道如何修复错误,但我不确定为什么会这样。) 包子分类向量; 导入java.util.Vector; 公共类MyVectorSubclass扩展了Vector{ 公共MyVectorSubclass(){ MyModelClass m=新的MyModelClass(); m、 setId(2); 本条增补(m); 如果(本文件包含(m)){ System.out.println(“c
add
方法中引用'super'而不是'this',我知道如何修复错误,但我不确定为什么会这样。)
包子分类向量;
导入java.util.Vector;
公共类MyVectorSubclass扩展了Vector{
公共MyVectorSubclass(){
MyModelClass m=新的MyModelClass();
m、 setId(2);
本条增补(m);
如果(本文件包含(m)){
System.out.println(“contains为true”);
}
}
公共布尔添加(MyModelClass o){
本条增补(o);
返回true;
}
公共布尔包含(对象o){
对于(SubassignVector.MyModelClass mmc:此){
if(mmc.equals((MyModelClass)o)){
返回true;
}
}
返回false;
}
公共静态void main(字符串[]args){
字符串s=新字符串(“SSEE”);
MyVectorSubclass m=新的MyVectorSubclass();
}
公共类MyModelClass{
私有整数id=null;
公共MyModelClass(){
//TODO自动生成的构造函数存根
}
公共整数getId(){
返回id;
}
公共无效集合id(整数id){
this.id=id;
}
}
}
此代码永远调用自身,因此StackOverflower错误:
public boolean add(MyModelClass o){
this.add(o);
return true;
}
此
表示正在调用当前方法的对象的实例。事实上,在这种情况下,上述代码与以下代码完全相同:
public boolean add(MyModelClass o){
add(o);
return true;
}
此代码执行完全不同的操作:
public boolean add(MyModelClass o){
super.add(o);
return true;
}
这不会进行递归调用。这只是在基类中调用add()
的实现
科里·肯德尔对这个问题的评论非常有价值:
如果您得到一个
堆栈溢出错误
,查看错误的堆栈跟踪应该是有用的;使用给定的行号浏览逻辑
异常的堆栈跟踪可以为您提供许多有关问题根源的有用信息。在这种情况下,堆栈跟踪将清楚地显示MyVectorSubClass.add()
在this.add(o)
的情况下重复调用自己
我建议看一下:
super.add()
可能。感谢您的回答。很明显,我现在做错了什么。我的目标是创建一个向量子类,我可以在模型中使用,并且只允许添加某些模型,并创建一个有效的contains方法覆盖,检查模型ID而不是对象ID,我承认,我可能会更好地理解。如果你得到一个StackOverflower
,查看错误的堆栈跟踪应该是有用的;使用给定的行号浏览逻辑。
public boolean add(MyModelClass o){
super.add(o);
return true;
}