2014-11-06 96 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); 
} 

但我建議你只是做手工來代替。