Java中的load方法最后调用另一个方法

Mic*_*eco -2 java methods abstract-class class

我有一个抽象类,Task有两个方法execute(),并finish()为如下:

abstract class Task {
  abstract void execute();

  private void finish() {
    // Do something...
  }
}
Run Code Online (Sandbox Code Playgroud)

如何确保隐式调用的execute()子类中的重载方法作为最后一条语句?Task finish()

str*_*sus 10

我不相信有任何“强制”子类来调用方法的方法,但是您可以尝试某种模板方法方法:

abstract class Foo {
  protected abstract void bar();     // <--- Note protected so only visible to this and sub-classes

  private void qux() {
    // Do something...
  }

  // This is the `public` template API, you might want this to be final
  public final void method() {
    bar();
    qux();
  }
}
Run Code Online (Sandbox Code Playgroud)

公共method是入口点,先调用抽象bar,然后再调用私有qux方法,这意味着任何子类都遵循模板模式。但是,这当然不是万能的灵丹妙药-子阶级可以简单地无视公众method

  • @MichaelPacheco至少这个答案很有道理,您的问题和论据_dont_ (4认同)
  • @MichaelPacheco在这种情况下,如果您的抽象类只有一个方法,则可以考虑使其成为一个函数接口,并添加一个静态的“ execute”方法来调用该抽象方法,然后调用“ qux”,例如,interface Foo {void bar( ); 静态void execute(Foo foo){foo.bar(); qux(); } ...}` (3认同)
  • @MichaelPacheco:re`“ ...我不想要它...”`提出了“为什么?”的问题,而这个问题的主要推动力是什么?再次,根据我对OP的评论,我担心我们可能正在解决XY问题-试图解决错误的问题,但是没有更多的背景知识和支持*具体*的信息,谁也无法确定。 (2认同)