[英]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") }
類型推斷表明context
是ratpack.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.