当我仔细研究 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.List
,kotlin.collections.MutableList
也是如此。
这意味着这些 Kotlin 接口的用法被编译为字节码中 Java List
接口的用法。另一方面,从库中读取的签名中的 Java List
接口用法被视为kotlin.collections.(Mutable)List
。
还有更多映射类型:请参阅参考。
这允许以无缝的方式从 Java 调用 Kotlin,反之亦然,同时仍然将 Java 类型表示为 Kotlin 中的kotlin.*
类,例如,这使我们免于原语和数组不是类,并通过接口引入不变性。