我是新來的CompletableFuture,我想調用一個方法MetadataLoginUtil :: login可以拋出異常。但是,下面的代碼並沒有被編譯,雖然我寫了'異常'。它說,我必須在嘗試& catch中包裝MetadataLoginUtil :: login。嘗試與抓住時調用supplyAsync
請指教。 謝謝!
public void run() throws ConnectionException {
CompletableFuture<Void> mt = CompletableFuture.supplyAsync(MetadataLoginUtil::login).exceptionally(e -> {System.out.println(e); return null; }).thenAccept(e -> System.out.println(e));
}
謝謝,那麼'異常'的意義是什麼?我不明白爲什麼我們需要這個 – sfdcdev
問題是,完整的lambda原則根本不包括檢查的異常。不過,您可以異常使用或處理RuntimeException及其派生。一種非常常見的模式是,在運行時異常中將lambda包裝爲異常並重新拋出:catch(Exception e){throw new RuntimeException(e); } – mtj
@mtj:lambdas和異常一起工作;這只是接口聲明的問題。你甚至可以使接口的異常類型參數聲明方法精確地拋出提供的函數參數可能拋出的東西。然而,這在API的固定版本不適用於早期的Java 8編譯器版本。 – Holger