使用参数化类作为Map
的键类型时遇到问题。首先创建参数化类:
scala> sealed abstract class Foo[T]{ def t: T }
defined class Foo
现在在未知参数中创建一些虚构的集合:
scala> var l: List[Foo[_]] = Nil
l: List[Foo[_]] = List()
现在创建一个Map来存储它们:
scala> var mm: Map[Foo[_], Any] = Map.empty
mm: Map[Foo[_],Any] = Map()
现在尝试填充地图
scala> l.foreach { foo: Foo[_] =>
| mm += (foo -> "BAR")
| }
给我以下编译器错误:
<console>:9: error: type mismatch; found : foo.type (with underlying type Foo[_]) required: Foo[_$1] where type _$1 mm += (foo -> "BAR") ^
这在2.8中编译得很好。是否有任何解决方法可以在2.7中使用它?
编辑 - 这对我也很有用:
var mm: Map[AnyRef, Any] = Map.empty //note not Foo[_]
scala> l.foreach { foo: Foo[_] =>
| mm += ( (foo: AnyRef) -> "BAR") //still have to tell compiler foo is an AnyRef
| }
答案 0 :(得分:1)
这个适用于我(即使在Scala 2.7中):
scala> l.foreach { foo: Foo[_] => | mm += (foo.asInstanceOf[Foo[_]] -> "BAR") | }
很奇怪,但这似乎是2.7中的一个错误,已在2.8中修复。