Создайте ParameterizeType для вашего типа:
// It's supposed to be internal.
// You could use sun.reflect.generics.reflectiveObjects but it is not portable.
// Or you can implement it yourself (see below)
ParameterizedType type = new com.google.inject.internal.MoreTypes.ParameterizedTypeImpl(null, MyClass.class, a, b);
Создайте из него TypeLiteral:
TypeLiteral typeLiteral = TypeLiteral.get(type);
Теперь создайте внедренный экземпляр:
return (MyClass<A,B>) injector.getInstance(Key.get(typeLiteral))
На практике вы хотите реализовать ParameteriedType самостоятельно:
final Type[] types = {a, b};
ParameterizedType type = ParameterizedType() {
@Override
public Type[] getActualTypeArguments() {
return types;
}
@Override
public Type getOwnerType() {
return null;
}
@Override
public Type getRawType() {
return MyClass.class;
};
}
РЕДАКТИРОВАТЬ: На самом деле, вы можете использовать:
Types.newParameterizedType(MyClass.class,a,b)
см. Модуль Guice с параметрами типа