我试图掌握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