Почему я получаю StackOverflowError: переопределяющий метод ArrayList add? - PullRequest
0 голосов
/ 02 декабря 2018

Используя Netbeans 9 под Windows 10, я создал в JAVA класс MyClass, расширяющий Anotherclass, реализующий List, Serialize и принятый для переопределения методов из List, например, следующий метод add:

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

Я вызываю егоиз другого класса, и когда я пытаюсь использовать его, я получаю ошибку переполнения стека.Отладка показывает, что метод вызывается рекурсивно.Код вроде в порядке или нет?Кто-нибудь может мне помочь?

Спасибо

Ответы [ 4 ]

0 голосов
/ 02 декабря 2018

Вы получаете эту ошибку из-за рекурсивного вызова add (), как вы узнали.Функция работает нормально, если e не относится к типу wohnung, потому что вы просто возвращаете результат, но когда e относится к типу wohnung, вы вызываете add () рекурсивно, и поскольку нет базового случая, вы получаете ошибку переполнения стека из-за слишком большого количества вызовов add ().вам нужно вызвать супер метод add, чтобы решить эту ошибку.

0 голосов
/ 02 декабря 2018

Вы ищете что-то вроде этого:

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

Ответ найден здесь

Как редактирование:

Как уже описали другиевы получаете эту ошибку, поскольку вы вызываете один и тот же метод снова и снова, если отправляете объект типа Wohnung.Вообразите это;если объект типа dog вызывает add(), но однажды в методе add вы написали код, который снова вызывает тот же add(), что приводит к ошибке.

0 голосов
/ 02 декабря 2018

Проблема, как сказал @Al Kepp.Вот что вы можете использовать в качестве решения:

 @Override
    public boolean add(Object e) {
    boolean result = false;
    if (e instanceof Wohnung){ 
          super.add( (Wohnung) e);result=true;
    }
   return result;
   }
0 голосов
/ 02 декабря 2018

Существует бесконечный цикл.Вы определяете метод add и затем вызываете его из себя.Ваш бесконечный цикл вызывает ошибку переполнения стека.

...