Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么这会给我提供堆栈溢出错误?_Java_Stack Overflow - Fatal编程技术网

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)
的情况下重复调用自己

我建议看一下:


OP正在寻找
super.add()
可能。感谢您的回答。很明显,我现在做错了什么。我的目标是创建一个向量子类,我可以在模型中使用,并且只允许添加某些模型,并创建一个有效的contains方法覆盖,检查模型ID而不是对象ID,我承认,我可能会更好地理解。如果你得到一个
StackOverflower
,查看错误的堆栈跟踪应该是有用的;使用给定的行号浏览逻辑。
public boolean add(MyModelClass o){
    super.add(o);
    return true;
}