Java 中的共享接口和 Kotlin 之间的关系(例如:List<>)



当我仔细研究 kotlin .map 内联函数时,这个问题出现了。这是它的定义

public inline fun <T, R> Iterable<T>.map(transform: (T) -> R): List<R>{
return mapTo(ArrayList<R>(collectionSizeOrDefault(10)), transform)}

函数定义中,它应该返回一个 List,该列表在 Collection.kt 中定义。但是,它返回一个 ArrayList,它在 Java 中实现了一个 List 接口(List.java)。

Java 接口和 Kotlin 接口是什么关系?我想会有更多类似的例子,也许是 Set 或 Map?

在 JVM 平台上,Kotlin 接口kotlin.collections.List映射到 Java 接口java.util.Listkotlin.collections.MutableList也是如此

这意味着这些 Kotlin 接口的用法被编译为字节码中 Java List 接口的用法。另一方面,从库中读取的签名中的 Java List 接口用法被视为kotlin.collections.(Mutable)List

还有更多映射类型:请参阅参考。

这允许以无缝的方式从 Java 调用 Kotlin,反之亦然,同时仍然将 Java 类型表示为 Kotlin 中的kotlin.*类,例如,这使我们免于原语和数组不是类,并通过接口引入不变性。

相关内容

最新更新