2017-02-06 12 views
2

私は共変でなければならないクラスを持っています。このクラスは、地図が含まれており、このマップのキーは、私のクラスと同じTタイプを使用している必要があります。スカラ共変クラスcontaingマップ(不変のキー)

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) 

地図キータイプパラメータは不変であるので、それがコンパイルされません。このような状況の回避策はありますか?

感謝:)

+0

をあなたはPECSに精通していますか? –

+0

それは:) – Loic

答えて

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) 
関連する問題