簡體   English   中英

使用Kotlin函數作為Java SAM類型

[英]Using Kotlin function as Java SAM type

從Java API調用需要SAM(單個抽象方法)類型參數的方法時,是否存在一種將函數文字強制轉換為正確類型的一致方法? 我發現有時候Kotlin函數可以很好地工作,而其他函數似乎並沒有任何一致性。

我有一些來自Ratpack API的示例:

當使用Kotlin函數文字調用ChainAction.handler(String, Handler)可以正常工作,例如:

handler("foo") { context -> context!!.render("from the foo handler") }

類型推斷表明contextratpack.handling.Context? 正確。

另一方面,我試圖調用Guice.handler(LaunchConfig, Action<? super ModuleRegistry>, Action<? super Chain>) ,卻不知道如何讓Kotlin函數代替第二個參數。 這是否歸因於通用類型使生活變得困難?

也許我希望Kotlin可以完成並非為特定目的而設計的工作,但第一個示例表明,至少可以進行某些 SAM類型的強制轉換(對於Ratpack Handler是Kotlin的樂趣)。

這是類型投影的一個臨時問題(Java的? super Foo在Kotlin中被翻譯成類型投影)。 將在不久的將來修復。

提示:在困難情況下,可以使用“ SAM適配器”,例如Action<in Foo> { bar() }明確指定類型

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM