可以在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);
}
但我建议您只手动操作。