Scala ковариантный класс, связывающийся с картой (который является инвариантом)
У меня есть класс, который должен быть ковариантным. Этот класс содержит карту, и ключ этой карты должен использовать тот же тип T, что и мой класс:
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) // needs to compile (covariant)
Он не компилируется, поскольку параметр типа ключа карты является инвариантным. Есть ли обходной путь для такой ситуации?
Спасибо:)
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)