继 这个问题之后,有人能在 Scala 中解释下面的内容吗:
class Slot[+T] (var some: T) {
// DOES NOT COMPILE
// "COVARIANT parameter in CONTRAVARIANT position"
}
我理解类型声明中 +T
和 T
之间的区别(如果我使用 T
,它会进行编译)。但是如何实际编写一个类,它的类型参数是协变的,而不需要创建 非参数化?如何确保只能使用 T
的实例创建以下内容?
class Slot[+T] (var some: Object){
def get() = { some.asInstanceOf[T] }
}
编辑 -现在我们把这个问题归结为以下几点:
abstract class _Slot[+T, V <: T] (var some: V) {
def getT() = { some }
}
这很好,但是我现在有两个类型参数,其中我只需要一个。我要重新问这个问题:
如何编写类型为 协变体的 永恒不变 Slot
类?
切! 我用的是 var
而不是 val
。下面是我想要的:
class Slot[+T] (val some: T) {
}