У меня проблема с использованием параметризованного класса в качестве типа ключа 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
| }