为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

浮云间 2022-11-30 13:51:17
我有一个Task具有两种方法的抽象类execute(),finish()如下所示:abstract class Task {  abstract void execute();  private void finish() {    // Do something...  }}如何确保execute()子类中的重载方法Task 隐式调用finish()为最后一条语句?
查看完整描述

2 回答

?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

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


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

  }

}

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


查看完整回答
反对 回复 2022-11-30
?
湖上湖

TA贡献2003条经验 获得超2个赞

您可以创建一个ExecutorCloseable实现该[AutoCloseable]接口的类,例如:


public class ExecutorCloseable extends Foo implements AutoCloseable 

{

  @Override

  public void execute() 

  {

    // ...

  }


  @Override           //this one comes from AutoCloseable

  public void close() //<--will be called after execute is finished

  {

     super.finish();

  }

 }

你可以这样称呼它(愚蠢的main()例子):


 public static void main(String[] args) 

 {

     try (ExecutorCloseable ec = new ExecutorCloseable ()) 

     {


        ec.execute();


     } catch(Exception e){

        //...

     } finally {

       //...

    }

 }

希望它有意义,我真的不知道你如何调用这些方法,也不知道你如何创建类。但是,嘿,这是一个尝试:)


不过,要使其起作用,finish()方法Foo应该是protectedor public(推荐第一个)。


查看完整回答
反对 回复 2022-11-30
  • 2 回答
  • 0 关注
  • 83 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信