很明显,一个覆盖方法应该调用super的好方法?

Dur*_*dal 2 java overriding annotations super

这个问题只是让我感到困惑,在重写方法时很容易忘记调用super().

在我的情况下,我正在重构一些现有的东西,其中已经有大约十个类覆盖了一个方法.直到昨天,该方法都有一个空的默认实现,所以如果子类称为super,则无关紧要.你可以在任何有价值的IDE中找到覆盖物,但是你知道它是怎么回事,电话铃声,同事们背后都有一个小小的东西......很容易忘记检查一个地方或者忽略它.理想情况下,@ Override注释会有一个对应物,如果基类方法被注释但是覆盖不会调用super,编译器会为这些位置生成警告.

什么是我能做的最好的事情?

axt*_*avt 10

不太优雅,但可能的解决方案是将该方法分解为两个:

public abstract class Foo {
    public void doBar() {
        // do your super logic
        doBarInternal();
    }

    public abstract void doBarInternal();
}
Run Code Online (Sandbox Code Playgroud)

  • 我会说它相当优雅 - 这基本上就是模板方法模式. (5认同)