首页 > 解决方案 > load方法在Java中最后调用另一个方法

问题描述

我有一个Task具有两种方法的抽象类execute()finish()如下所示:

abstract class Task {
  abstract void execute();

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

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

标签: javaclassmethodsabstract-class

解决方案


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

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();
  }
}

公共method是入口点,调用抽象bar然后是私有qux方法,这意味着任何子类都遵循模板模式。然而它当然不是灵丹妙药——一个子类可以简单地忽略公众method


推荐阅读