包含映射的Scala协变类(不变量中的键)

时间:2017-02-06 14:00:49

标签: scala variance

我的课程需要协变。这个类包含一个Map,这个map的键必须使用与我的类相同的T类型:

err

它不会编译,因为Map键类型参数是不变的。针对这种情况有解决方法吗?

谢谢:)

1 个答案:

答案 0 :(得分:1)

定义像这样的U类,它正在工作:

class A
class B extends A

class Container[+T](val content: T) {
  type U <: T
  val map : Map[U,_] = Map.empty
}

val c1: Container[A] = new Container[B](new B)

或者:

class A
class B extends A

class Container[+T](val content: T) {
    val map : Map[_<: T,_] = Map.empty
}

val c1: Container[A] = new Container[B](new B)