2014-11-06 57 views
0

是否有可能绑定Dinice在Guice的泛型类型?Guice类型文字绑定

我知道是否有可能,例如做:

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

但是,可以dinamically创建TypeLiteral ??? 。我想在这个例子中,我知道要SomeInterface到SomeImplementation .....但是如果我想要这样做dinamically ...

例如,如果我有String1,String2,....字符串“n”...有可能做类似这样的伪代码的功能

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

是否有可能做出类似的事情,也许与Refections? 谢谢。

回答

3

以下应该工作,虽然我还没有测试它编译:

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); 
} 

但我建议你只是做手工来代替。