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.List
, kotlin.collections.MutableList
也是kotlin.collections.MutableList
。
这意味着这些Kotlin接口的用法被编译成字节码中Java List
接口的用法。 另一方面,从库中读取的签名中的Java List
接口用法被看作kotlin.collections.(Mutable)List
。
有更多的映射类型: 请参阅参考 。
这允许以无缝的方式从Java调用Kotlin,反之亦然,同时仍然将Java类型表示为Kotlin中的kotlin.*
类,例如,可以将我们从基元和数组中kotlin.*
出来而不是类,并且通过接口引入了不变性 。