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

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

為 Runnable 包裝 Lambda 表達式以處理異常

為 Runnable 包裝 Lambda 表達式以處理異常

郎朗坤 2021-08-06 10:21:07
我正在嘗試初始化一個 Runnable 數組,然后運行它們的代碼。我需要初始化盡可能具有可讀性,因此我為此使用了 Lambda 表達式?,F在我不知道如何解決異常問題。如果 Runnables 中的某些代碼拋出已檢查的異常,我想將其自動包裝到 RuntimeException 中,但不將 try/catch 邏輯放入每個 Runnable 主體中。代碼如下所示:public void addRunnable(Runnable ... x); // adds a number of Runnables into an array...addRunnable(   ()->{       some code;       callMethodThrowsException();  // this throws e.g. IOException   },   ()->{       other code;   }   // ... and possibly more Runnables here);public void RunnableCaller(List<Runnable> runnables) {    // Now I want to execute the Runnables added to the array above    // The array gets passed as the input argument "runnables" here    for(Runnable x: runnables) {        try {            x.run();        } catch(Exception e) { do some exception handling }    }}代碼無法編譯,因為 callMethodThrowsException 拋出了一個已檢查的異常,而 Runnable 沒有,所以我必須在 Runnable 定義的內部插入一個 try/catch 塊。try/catch 塊會使這件事變得不那么方便,因為我必須將它放入每個 Runnable 主體聲明中,這將難以閱讀且編寫起來令人不快。我也可以創建自己的 Runnable 類來拋出異常,但是我不能使用 Lambda 表達式 ()-> 這使得它簡短易讀而不是做new ThrowingRunnable() { public void run() throws Exception { some code; } }有沒有辦法定義我自己的功能接口來解決這個問題,以便我可以使用相同的代碼,但異常將被包裝到例如 RuntimeExceptions 等中?我可以完全控制調用代碼,因此在那里捕獲異常沒有問題,我只需要一種非常易讀的編寫稍后將執行的代碼的方式。我看到了這個話題拋出異常的 Java 8 Lambda 函數?但我沒有想出如何解決我的問題,我對功能接口不是很熟悉。可能有人可以幫忙,謝謝。
查看完整描述

1 回答

?
翻過高山走不出你

TA貢獻1875條經驗 獲得超3個贊

Lambda 不僅用于 JVM 提供的接口。它們可用于精確定義一個且僅一個抽象方法的每個接口。所以你可以自己創建一個接口,你已經命名了它:


public interface ThrowingRunnable{

    void run() throws Exception;

}

然后替換方法中的Parameter類型addRunnable:


public void addRunnable(ThrowingRunnable... runnables){ ... }

然后讓這個編譯:


addRunnable(

   ()->{

       some code;

       callMethodThrowsException();  // this throws e.g. IOException

   },


   ()->{

       other code;

   }

   // ... and possibly more Runnables here

);


查看完整回答
反對 回復 2021-08-06
  • 1 回答
  • 0 關注
  • 213 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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