【发布时间】:2021-06-25 15:38:08
【问题描述】:
我遇到了一个以前从未遇到过的奇怪情况。在我的公司,我们有很多项目,其中大多数使用 Java,但使用 Kotlin 的项目越来越多。所以我们有这个用 Java 编写的现有应用程序,并且我们正在添加一个用 Kotlin 编写的库。
Kotlin 代码有一个接受 lambda 表达式的函数参数。该 lambda 具有这种类型,“params”参数是一个值为“Any”的映射:
(params: Map<String,Any>) -> List<Item>
在 Java 代码中,我们通过获取“参数”并将它们传递给 Java 函数来实现这个 lambda:
params -> receiverFunction(params)
但是,Java 函数接受值为“Object”的 map 参数:
public List<Item> receiverFunction(final Map<String,Object> params)
我现在收到一个编译错误,其中 Java lambda 中的“params”被视为具有类型 Map<String,capture of ?>,无法传递给 Map<String,Object>。
实现这一级别的 Java/Kotlin 互操作性的推荐方法是什么?
【问题讨论】: