Я хочу использовать карту разных типов на неизвестном A:
val map: Map[Foo[A], Bar[A]] = ...
...
val foo = new Foo[Qux]
val bar: Bar[Qux] = map(foo)
Это не работает, потому что A неизвестно. Вместо этого я должен определить это как:
val map: Map[Foo[_], Bar[_]] = ...
...
val foo = new Foo[Qux]
val bar: Bar[Qux] = map(foo).asInstanceOf[Bar[Qux]]
Это работает, но приведение некрасиво. Я лучше найду способ получше. Я так понимаю, ответ - использовать экзистенциальные типы с ключевым словом forSome
, но я не понимаю, как это работает. Должен быть:
Map[Foo[A], Bar[A]] forSome { type A }
или:
Map[Foo[A] forSome { type A }, Bar[A]]
или:
Map[Foo[A forSome { type A }], Bar[A]]