可以在Guice中绑定一个泛型类型吗?

我知道有可能做例如:

bind(new TypeLiteral<SomeInterface<String>>(){})
    .to(SomeImplementation.class);


但是,有可能以动态方式创建TypeLiteral ??? 。我的意思是,在示例中,我知道要对SomeImplementation出价SomeInterface .....但是,如果我想这样做,该怎么办...

例如,如果我有String1,String2,.... String“ n” ...可以执行类似此伪代码的功能

   function (Class<?> interfaceWithoutType, Clas<?>  type , Class<?> implementingClass) {
        TypeLiteral typeLiteral = **"createTypeLiteral"** (interfaceWithoutType, type);
        bind ( typeLiteral).to(implementingClass)
    }


是否有可能通过Refections做出类似的事情?
谢谢。

最佳答案

尽管我尚未对其进行测试编译,但以下内容应该可以工作:

private <T> void bindSomeInterface(Class<T> typeParameter, Class<? extends SomeInterface<T>> implementation) {
    Type parameterizedType = Types.newParameterizedType(SomeInterface.class, typeParameter);
    bind((TypeLiteral<SomeInterface<T>>) TypeLiteral.get(parameterizedType))
            .to(implementation);
}


但我建议您只手动操作。

10-06 13:06