2017-06-26 6 views
1

これはKotlin特有の問題ではありませんが、なぜ宣言サイトの分散(共変および反変)を使用するのかを理解したいと思います。私はそれらを使用する方法を理解しているだけで、私は多くの利点を見ないか、場合によっては別のものを選択しなければならず、なぜ私はUse-site分散をいつも使用したくないのですか?Declaration-Site Varianceを使用する理由

+0

kotlinドキュメントのジェネリックスセクションを読んだことがあるかどうかわかりませんが、このエリアでは私にとって多くのことが解決されました。 https://kotlinlang.org/docs/reference/generics.html – Neil

答えて

3

宣言サイトでは、クリエイターが最初に作成されたときにクリエイターがすでに決定した場合、分散について考える必要がないため、クライアントはジェネリックタイプのクラスを簡単に使用できます。このようなジェネリッククラスを扱う場合、コンパイラは可能な分散について確かめることができます。

//declaration-site 
abstract class ReadableList<out T> { 
    abstract fun get(): T 
} 

fun workWithReadableList(strings: ReadableList<String>) { 
    val objects: ReadableList<Any> = strings // This is OK, since T is an out-parameter, ReadableList is covariant in its type T 
    // ... 
} 

冗長な使用サイトのJava構文を見てください。多くの人々はsuperextendsの違い、またはどのような差異があるかを知りません。 Kotlinのキーワードinoutは少し説明的で、他の言語でも使用されています。

+0

清算していただきありがとうございます。私はコレクションで宣言サイトの差異を使用していると考えていましたが、クラスとして検討する必要があります。 – BigApeWhat

関連する問題