2017-06-01 6 views
13

私は理解できず、の意味はkotlinのです。kotlinのキーワードはありません

あなたはここに例を確認することができます。

List<out T> 

いずれかがこの意味を説明することができます。本当に感謝しています。

答えて

8

タイプ:

val doubleList: List<Double> = listOf(1.0, 2.0) 
val numberList: List<Number> = doubleList 

Tを意味共変ですパラメータクラスCのTは>が安全のC <が>派生スーパータイプとすることができるアウトC <ベースと宣言されます。

これは例えば、とは対照的です

Comparable<in T> 

あなたはこれを行うことができます。クラスの型パラメータTCが宣言されたときに

Tを意味

fun foo(numberComparable: Comparable<Number>) { 
    val doubleComparable: Comparable<Double> = numberComparable 
    // ... 
} 

反変ですin、>派生C <安全C <ベース>スーパーすることができます。

もう一つの方法は、それを覚えておく:

消費者、プロデューサーアウト。

はKotlinに例えばKotlin Generics Variance

+0

ようなことを行うことができます私は1つ見て 'リストのための最も重要なポイントだと思い '宣言は' out'が作ることですそれは不変です(変化のないコレクションと比較して、出ていないコレクションと比較して)。それは、その答えに言及し、強調するのを助けるかもしれません。暗黙的なキャストは、主なポイントではなく、リストに書き込むことができないため、リストへの参照としても安全です。 – minsk

+0

申し訳ありませんが、まだ理解できませんでした。 –

4

は、manual of kotlin

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> 

は、あなたがこれを行うことができます:このシグネチャを持つ

2
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 
関連する問題