covariance and contravariance
協變(Co-variance) 將子類別的容器指派給上層類別容器的能力稱之.
逆變(Contra-variance)
將父類別的容器指派給子類別容器的能力稱之.
參數化類型的可變性 Scala 對協變與逆變在預設行為下是都不支持的, 但我們仍希望能夠處於慎重地情境中, 將子類別類型的容器, 把它視為其上層類型的容器類.
scala> var ar1 = new Array[Int](3)
ar1: Array[Int] = Array(0, 0, 0)
scala> var ar2: Array[Any] = null
ar2: Array[Any] = null
scala> ar2 = ar1
<console>:7: error: type mismatch;
found : Array[Int]
required: Array[Any]
ar2 = ar1
^
[T <: BaseClass] T 必須為 BaseClass 的子類別, 屬 上界 的語法
[S, D >: S]
目的陣列的參數化類型 D 限制為來源陣列的參數化 S 的上層類型, 用以設定 下界.
[+T] 把子類型的容器當成 Base class 的容器, 來達到協變的效果.
[-T] 逆變
|