1

当从 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 类型的强制是可能的(Kotlin 对 Ratpack 很有趣Handler)。

4

1 回答 1

2

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

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

于 2014-08-04T15:45:11.780 回答