2

我在使用参数化类作为 a 的键类型时遇到问题Map。首先创建参数化类:

scala> sealed abstract class Foo[T]{  def t: T }
defined class Foo

现在创建一些跨未知参数的虚构集合:

scala> var l: List[Foo[_]] = Nil
l: List[Foo[_]] = List()

现在创建一个地图来存储这些:

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
     | }
4

1 回答 1

1

这对我很有效(即使在 Scala 2.7 中):

scala> l.foreach { foo: Foo[_] =>
     | mm += (foo.asInstanceOf[Foo[_]] -> "BAR")
     | }

很奇怪,但这似乎是 2.7 中的一个错误,已在 2.8 中修复。

于 2010-04-12T20:05:24.730 回答