gpt4 book ai didi

java - Kotlin Any 类型到 Java Object 类型

转载 作者:行者123 更新时间:2023-12-05 09:04:51 24 4
gpt4 key购买 nike

我遇到了一个以前从未遇到过的奇怪情况。在我的公司,我们有很多项目,其中大部分是 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 互操作性的推荐方法是什么?

最佳答案

您在 Kotlin 端定义的 Map 是一个只读 Map,因此值类型被标记为 out。 Kotlin的out Any大致相当于Java的?扩展对象。但是由于您的 receiverFunction 将值类型定义为更严格的 Object,因此它们不匹配。

方案一:将Java值类型改为?,等同于?扩展对象

解决方案 2:将 Kotlin 参数从 Map 更改为 MutableMap。

如果 receiverFunction 不需要改变映射(它可能不需要),则更喜欢解决方案 1。并且 Java 方法可能一开始就应该以这种方式编写,以便更好地封装,甚至不必牢记 Kotlin。

关于java - Kotlin Any 类型到 Java Object 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68133632/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com