使用Kotlin函数作为Java SAM类型

从一个期望SAM(单抽象方法)类型参数的Java API调用方法时,是否存在一种将函数文本强制转换为正确类型的一致方法? 我发现有时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类型的强制是可能的(Kotlin对Ratpack Handler乐趣)。

这是类型投影的一个暂时的问题(Java的? super Foo被翻译成Kotlin的类型投影)。 将在不久的将来得到修复。

提示:在困难的情况下,您可以使用“SAM适配器”,例如Action<in Foo> { bar() }来明确指定类型