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

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

如何將 Kotlin lambda 傳遞給 Java Supply 參數?

如何將 Kotlin lambda 傳遞給 Java Supply 參數?

長風秋雁 2023-07-19 17:01:55
我將我的項目遷移到 Kotlin,這個階段 Java 和 Kotlin 之間有很多交互。在下面的示例中,我需要傳遞一個實現 Java Supply 接口的函數。java.util.concurrent.CompletableFuture.supplyAsync<Int>({ -> 3 }, executor)CompletableFuture.supplyAsync({ 3 }, executor)IntelJ 顯示錯誤:Type mismatch.Required: Supplier<Int!>!Found: () -> Int我找到了一個使用幫助程序類的解決方法,但它不是內聯解決方案。class Help : Supplier<Int> { fun get() = 3 }supplyAsync(Help(), executor)
查看完整描述

1 回答

?
PIPIONE

TA貢獻1829條經驗 獲得超9個贊

這將起作用:

CompletableFuture.supplyAsync({?3?},?executor::execute)

注意這兩個簽名是

public?static?<U>?supplyAsync(supplier:?Supplier<U>,?executor:?Executor):?CompletableFuture<U>
public?static?<U>?supplyAsync(supplier:?()?->?U,?executor:?(Runnable)?->?Unit):?CompletableFuture<U>

也就是說,如果您想傳入 lambda,執行它的對象必須是方法引用(而不是實例Executor)。

Kotlin 允許您調用采用 SAM(功能接口)參數并以適當的 Kotlin 函數作為參數的方法。然而,這要么全有,要么全無。您可以為所有 SAM 參數傳遞一個 Kotlin 函數,也可以不傳遞一個 Kotlin 函數。這解釋了為什么您最初采用的方法無法編譯。這不是 Java API 的特定方法,而是適用于 Java 類上定義的所有方法。


查看完整回答
反對 回復 2023-07-19
  • 1 回答
  • 0 關注
  • 140 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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