私は理解できず、の意味はkotlinのです。kotlinのキーワードはありません
あなたはここに例を確認することができます。
List<out T>
いずれかがこの意味を説明することができます。本当に感謝しています。
私は理解できず、の意味はkotlinのです。kotlinのキーワードはありません
あなたはここに例を確認することができます。
List<out T>
いずれかがこの意味を説明することができます。本当に感謝しています。
タイプ:
val doubleList: List<Double> = listOf(1.0, 2.0) val numberList: List<Number> = doubleList
Tを意味共変ですパラメータクラスCのTは>が安全のC <が>派生スーパータイプとすることができるアウト、C <ベースと宣言されます。
これは例えば、でとは対照的です
Comparable<in T>
あなたはこれを行うことができます。クラスの型パラメータTがCが宣言されたときに
:Tを意味
fun foo(numberComparable: Comparable<Number>) { val doubleComparable: Comparable<Double> = numberComparable // ... }
は反変ですin、>派生C <安全C <ベース>のスーパーすることができます。
もう一つの方法は、それを覚えておく:で
消費者、プロデューサーアウト。
はKotlinに例えばKotlin Generics Variance
Kotlin
List<out T>
タイプ、サイズのようのみ 読み取り操作提供するインターフェースであり、チエニルように取得し、参照してください。 Javaの場合と同様に、Collection<T>
から継承し、順番にIterable<T>
を継承します。 リストを変更するメソッドは、MutableList<T>
インターフェイスによって追加されます。この パターンはKotlinでは、 コンパイラにこの種のものを説明するための方法があり、Set<out T>/MutableSet<T>
とMap<K, out
V>/MutableMap<K, V>
そして、このためにも成立します。これは、宣言サイトの分散と呼ばれます。 の型パラメータTに注釈を付けると、
Source<T>
のメンバから返され、消費されることはありません。この を行うために、我々はアウト修飾子を提供します。> abstract class Source<out T> { > abstract fun nextT(): T } > > fun demo(strs: Source<String>) { > val objects: Source<Any> = strs // This is OK, since T is an out-parameter > // ... }
一般的なルールは次のとおりです。クラス
C
の型パラメータT
が うちに宣言されたとき、それはC
のメンバーにのみアウト位置に発生する可能性があり、しかし、 の戻り値C<Base>
は、安全にC<Derived>
のスーパータイプにすることができます。彼らはクラスC
が パラメータT
で共変である、またはT
は共変の型パラメータであることをことを言う「巧妙な言葉」で。 CはT'sのプロデューサーであり、
T
の消費者ではないと考えることができます。 out修飾子は分散注釈と呼ばれ、タイプパラメータ宣言サイトでは であるため、 宣言サイトの分散について説明します。これは、Javaの使用サイト の分散とは対照的です。ここでは、型の使用に含まれるワイルドカードによって型が共変します。List<out T>
は、あなたがこれを行うことができます:このシグネチャを持つ
List<out T> is like List<? super T> in Java
と
List<in T> is like List<? implements T> in Java
を参照してください、あなたは
val value : List<Any> = listOf(1,2,3)
//since List signature is List<out T> in Kotlin
ようなことを行うことができます私は1つ見て 'リストのための最も重要なポイントだと思い '宣言は' out'が作ることですそれは不変です(変化のないコレクションと比較して、出ていないコレクションと比較して)。それは、その答えに言及し、強調するのを助けるかもしれません。暗黙的なキャストは、主なポイントではなく、リストに書き込むことができないため、リストへの参照としても安全です。 –
minsk
申し訳ありませんが、まだ理解できませんでした。 –