2017-02-06 114 views
2

我有需要是協變的類。這個類包含一個地圖,這地圖的密鑰必須使用相同的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) 

它不會編譯,因爲地圖密鑰類型參數是不變的。有這種情況的解決方法嗎?

謝謝:)

+0

你熟悉佩奇? –

+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)