Как я могу реализовать следующий псевдокод в Scala с использованием отражения?
Мне это требуется для целей поиска универсального типа из Guice:
trait Foo[A]
class FooInt extends Foo[Int]
class FooString extends Foo[String]
bind(new TypeLiteral<Foo<Int>>() {}).to(FooInt.class);
def fooTypeLiteral(paramA: Class[_]): TypeLiteral[_] = ???
val foo = injector.getInstance(fooTypeLiteral(classOf[Int])
// foo: FooInt
Примечание: I не не имеет доступа к типу A
во время компиляции, следовательно, _
.Все решение должно быть выполнено рефлексивно (например, у меня не может быть parameterizeFoo[A : ClassTag](...)
).