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