【发布时间】:2011-08-04 21:53:13
【问题描述】:
在我的用例中,我有一个协变类型 Foo[+T] 和类 A <: t b c> 一个 Foo[A] 实例、“B”-> 一个 Foo[B] 实例和“C”-> 一个 Foo[C] 实例,这在 scala 中是否可行?
目前我将我的地图声明为 Map[String, Foo[T]]] 但是我不能在里面添加 Foo[A],编译器告诉我 Foo[T] 是预期的,而不是Foo[A],好像是Map参数缺少协方差造成的,有解决办法吗?
我现在的解决方法是对 Foo 进行反参数化并在代码中进行强制转换,这当然不令我满意,我还看到我可以使用 java 集合代替,但我更喜欢使用 scala。
提前感谢您的宝贵时间
【问题讨论】:
-
你说的是可变地图还是不可变地图?对于不可变映射,值类型是协变的......
-
哦,对了,我实际上是在使用 HashMap 实现作为 Java 的愚蠢反射,这在 scala 中是错误的,并且 HashMap 不是协变的 >
标签: scala covariance scala-collections