2017-11-01 7 views
1

kotlin .mapインライン関数を詳しく見てみると、この質問が出てきました。定義は次のとおりですJavaの共有インタフェースとKotlinの関係(例:List <>)

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

関数定義では、Collection.ktで定義されたListを返す必要があります。しかし、ListListをJava(List.java)で実装しているArrayListを返しています

JavaインターフェイスとKotlinインターフェイスの関係は何ですか?もっと似たような例があると思います。 JVMプラットフォームで

答えて

4

、Kotlinインタフェースkotlin.collections.ListであるJavaインターフェースjava.util.Listをマッピングし、そしてそうkotlin.collections.MutableListです。

これらのKotlinインターフェイスの使用法は、バイトコードのJava Listインターフェイスの使用法に合わせてコンパイルされます。一方、ライブラリーから読み取られたシグニチャー内のJava Listインターフェース使用は、kotlin.collections.(Mutable)Listと見なされます。

マップされたタイプは、see the referenceです。

これはまだ、たとえば、クラスでないプリミティブと配列から私たちを保存し、Kotlinでkotlin.*クラスなどのJavaの型を表す一方で、シームレスな方法でJavaからKotlinを呼び出し、その逆を可能にし、immutability through interfacesを紹介しています。

+0

ありがとうございます、答えは包括的で、正確で、参考文献です。 – Yao

関連する問題