首页 文章

使用Kotlin函数作为Java SAM类型

提问于
浏览
0

从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函数代表第二个参数 . 这是通用类型让生活变得困难吗?

也许我没有设计,但是第一个例子表明至少有一些SAM类型的强制是可能的(Kotlin对Ratpack Handler 有趣) .

1 回答

  • 1

    这是类型投影的临时问题(Java的 ? super Foo 被转换为Kotlin中的类型投影) . 将在不久的将来修复 .

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

相关问题