如何在不获取StackOverflowException的情况下重复覆盖可重写的方法?

时间:2018-04-29 07:56:22

标签: java override

我正在用Java创建一个库,需要一个无限重复的方法。它必须是可以覆盖的。我想出了下面这样的东西,但我得到StackOverflowException,这是可以预测的。

public void loop() {
  loop();
}

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

2 个答案:

答案 0 :(得分:1)

不加选择地调用自身的方法必然会引发堆栈溢出错误。避免这种不必要的递归,也许使用无限循环:

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

虽然父母应该做任何它应该做的事情:

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

答案 1 :(得分:1)

将工作资料从loop方法移到单独的方法中。

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

protected abstract void doWork();



@Override
protected void doWork() {
   ....
}