5

私は Scala が初めてで、現在 Scala の型パラメーターについて学んでおり、次のシナリオに遭遇しました。

と の2 つのクラスがあるAとします。Bここで、Bは のサブタイプですA

class A {
...
}

class B extends A {
...
}

だから私は言うことができますB <: A

これも意味があるのList[B] <: List[A]

4

1 に答える 1

19

List の場合、List の型パラメーターは共変であるため、B <: A実際には を意味します。List[B] <: List[A]型パラメーターを共変にするということは、それが List の定義で共変の位置にのみ表示されることを意味します。つまり、パラメーターの型としてではなく、メソッドの戻り値の型としてのみ表示されます。「Scala のツアー」には、varianceに関するセクションが含まれています。ウィキペディアにも分散に関する優れた記事があります。型パラメーターの分散の 3 つのオプションは次のとおりです。

  • 不変性:との関係がどうであれ、 はC[A]のサブタイプではありません。この例は、配列などの変更可能なデータ構造です。C[B]AB
  • 共分散:をB <: A意味しC[B] <: C[A]ます。例としては、不変のデータ構造や関数の戻り値の型があります。
  • 反変性:をA <: B意味しC[B] <: C[A]ます。たとえば、関数はパラメーターの型において反変です。
于 2012-10-14T10:43:21.707 に答える