Guice Type Literal Bindings

时间:2014-11-06 15:34:33

标签: java generics binding guice

是否可以在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? 谢谢。

1 个答案:

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

但我建议你手工完成。