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)} 

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

Java界面和Kotlin界面有什么关系? 我想象会有更类似的例子,也许设置,或地图?

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

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

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

这允许以无缝的方式从Java调用Kotlin,反之亦然,同时仍然将Java类型表示为Kotlin中的kotlin.*类,例如,可以将我们从基元和数组中kotlin.*出来而不是类,并且通过接口引入了不变性 。