相关疑难解决方法(0)

为什么示例不编译,又如何(共同,反向和反向)方差有效?

这个问题之后,有人可以在Scala中解释以下内容:

class Slot[+T] (var some: T) { 
   //  DOES NOT COMPILE 
   //  "COVARIANT parameter in CONTRAVARIANT position"

}
Run Code Online (Sandbox Code Playgroud)

我明白之间的区别+T,并T在类型声明(它编译如果我使用T).但是,如何实际编写一个在其类型参数中具有协变性的类而不依赖于创建未参数化的东西?如何确保只能使用实例创建以下内容T

class Slot[+T] (var some: Object){    
  def get() = { some.asInstanceOf[T] }
}
Run Code Online (Sandbox Code Playgroud)

编辑 - 现在得到以下内容:

abstract class _Slot[+T, V <: T] (var some: V) {
    def getT() = { some }
}
Run Code Online (Sandbox Code Playgroud)

这一切都很好,但我现在有两个类型参数,我只想要一个.我会再问这个问题:

如何编写一个在其类型中具有协变性不可变 Slot类?

编辑2:呃!我用过var而不是val.以下是我想要的:

class Slot[+T] (val some: …
Run Code Online (Sandbox Code Playgroud)

generics scala covariance contravariance

146
推荐指数
3
解决办法
3万
查看次数

标签 统计

contravariance ×1

covariance ×1

generics ×1

scala ×1