繁体   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