我有點被typechecker的嚴格低於—困惑似乎的Inv[T]
不變T
位置也Variantish
的參數列表中不變的:爲什麼所有不變的泛型類位置在Scala中的類型參數列表中都是不變的?
scala> class Inv[T]
defined class Inv
scala> class Variantish[+T, +TVar <: Inv[T]]
<console>:12: error: covariant type T occurs in invariant position in type <: Inv[T] of type TVar
class Variantish[+T, +TVar <: Inv[T]]
^
變異類型,通常可發生於什麼樣子像法律上不變的參數列表位置,例如與保護對象的可見性:
class Variantish[+T](protected[this] var v: Inv[T])
,似乎下面會是一樣的類型安全:該檢查上述那麼嚴格
class Variantish[+T, +TVar <: Inv[T]](protected[this] var v: TVar)
極品?