是否可以在Guice中将dinamically绑定为泛型类型?
我知道可以这样做:
bind(new TypeLiteral<SomeInterface<String>>(){})
.to(SomeImplementation.class);
但是,有可能创建一个TypeLiteral dinamically ??? 。我想说的是,在我知道将SomeInterface投标到SomeImplementation的例子中.....但是如果我想以恐怖的方式做到这一点...
例如,如果我有String1,String2,...... String&#34; n&#34; ...可以执行类似此伪代码的功能
function (Class<?> interfaceWithoutType, Clas<?> type , Class<?> implementingClass) {
TypeLiteral typeLiteral = **"createTypeLiteral"** (interfaceWithoutType, type);
bind ( typeLiteral).to(implementingClass)
}
是否可以制作类似的东西,可能是Refections? 谢谢。
答案 0 :(得分: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);
}
但我建议你手工完成。