我試圖掌握Scala中的協變和逆變。我有一組類這樣消息1和消息2的消息亞型Scala不可變映射協變
sealed trait Parser[T <: Message]{
//... blah blah
}
class Parser1 extends Parser[Message1]{
}
class Parser2 extends Parser[Message2]{
}
現在我有anothe模塊(工廠),存儲映射在一個不變的地圖
var myMap = Map[String,Parser[Message]()
myMap += Map("Message1" -> new Parser1)
myMap += Map("Message2"-> new Parser2)
現在,這並不編譯。我錯過了什麼?
這是編譯錯誤,我得到
[error] found : scala.collection.immutable.Map[java.lang.String,s.p.h.m.Parser1]
[error] required: (String, s.p.h.m.Parser[c.s.m.Message])
[error] myMap += Map("Message1" -> new Parser1)
請提供工作代碼。 Message1是Message的一個子類型嗎? 'var myMap = Map [String,Parser]()'不是有效的代碼,因爲'Parser'接受一個類型參數。 –
對不起,我錯過了它,當我將所有專有名稱替換爲通用名稱.. – questionersam