亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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條經驗 獲得超8個贊

我不相信有任何方法可以“強制”子類調用方法,但您可以嘗試某種模板方法方法:


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 關注
  • 104 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號