为什么会出现StackOverflowError:覆盖ArrayList add方法?

时间:2018-12-02 11:41:49

标签: java list override

在Windows 10下使用Netbeans 9,我在JAVA中创建了一个类MyClass扩展Anotherclass实现List,Serialize并被接受以覆盖List中的方法,例如以下添加方法:

 @Override
    public boolean add(Object e) {
    boolean result = false;
    if (e instanceof Wohnung){ 
          add( (Wohnung) e);result=true;
    }
   return result;
   }

我从另一个类调用它,当我尝试使用它时,出现堆栈溢出错误。对其进行调试表明,该方法是递归调用的。 该代码似乎还好吗? 有人可以帮我吗?

谢谢

4 个答案:

答案 0 :(得分:0)

有一个无限循环。您定义方法add,然后从自身调用它。您无休止的循环会产生堆栈溢出错误。

答案 1 :(得分:0)

您在寻找这样的东西吗?

public class TokenSequence extends ArrayList<Object> {
  @Override
  public boolean add(Object e) {
    return super.add(e);
  }
}

找到答案here

作为编辑:

正如其他人已经描述的那样,由于如果您发送类型为Wohnung的对象,一次又一次地调用相同的方法,则会出现此错误。想象一下;如果类型为dog的对象调用add(),但是一旦在add方法内部,您就编写了再次调用同一a add()的代码,因此出错。

答案 2 :(得分:0)

问题就如@Al Kepp所说。这是您可以用作解决方案的内容:

 @Override
    public boolean add(Object e) {
    boolean result = false;
    if (e instanceof Wohnung){ 
          super.add( (Wohnung) e);result=true;
    }
   return result;
   }

答案 3 :(得分:0)

由于发现递归调用add()而收到此错误。如果e不是wohnung类型,该函数就可以正常工作,因为您只是返回结果,但是当e是wohnung类型时,您将递归调用add(),并且因为没有基本情况,您会由于太多的add()调用而导致堆栈溢出错误)。 您需要调用add的超级方法来解决此错误。