Как заставить переопределенный метод повторяться, не получая StackOverflowException? - PullRequest
0 голосов
/ 29 апреля 2018

Я создаю библиотеку на Java, и мне нужен метод, который повторяется бесконечно. Это должно быть переопределено. Я придумал что-то вроде этого ниже, но я получаю StackOverflowException, что было предсказуемо.

public void loop() {
  loop();
}

@Override
public void loop() {
  super.loop();
  //some stuff
}

Ответы [ 2 ]

0 голосов
/ 29 апреля 2018

Переместите рабочий материал из вашего loop метода в отдельный метод.

public void loop() {
   while (!condition) {
      doWork();
   }
}

protected abstract void doWork();



@Override
protected void doWork() {
   ....
}
0 голосов
/ 29 апреля 2018

Метод, который вызывает себя без разбора, обязан вызвать ошибку переполнения стека. Избегайте этой нежелательной рекурсии и, возможно, используйте бесконечный цикл:

@Override
public void loop() {
    while(true) {
        super.loop();
    }
}

В то время как родитель должен просто делать то, что должен:

public void loop() {
  //do what is meant to do, not loop()
}
...