【发布时间】:2011-02-11 09:21:08
【问题描述】:
我有一个接口 TestInterface 有许多实现,当我使用 Guice 进行绑定时,我收到一条消息说 TestInterface
bind(TestInterface.class).annotatedWith(Names.named("Impl1Test")).to(Impl1.class);
附言我用一个虚拟接口进行了测试,但没有泛型,它工作得很好,我认为泛型需要做一些特殊的事情。
【问题讨论】:
标签: guice
我有一个接口 TestInterface 有许多实现,当我使用 Guice 进行绑定时,我收到一条消息说 TestInterface
bind(TestInterface.class).annotatedWith(Names.named("Impl1Test")).to(Impl1.class);
附言我用一个虚拟接口进行了测试,但没有泛型,它工作得很好,我认为泛型需要做一些特殊的事情。
【问题讨论】:
标签: guice
绑定泛型类型时,您需要使用TypeLiteral 而不是原始的class。否则,Guice 将无法区分泛型类型。在您的情况下,它看起来像这样:
bind(new TypeLiteral<TestInterface<Impl1, Impl2>>(){})
.annotatedWith(Names.named("Impl1Test"))
.to(Impl1.class);
如果您没有其他要绑定为TestInterface<Impl1, Impl2> 的东西,您甚至可能不需要annotatedWith。请注意 {} 在创建 TypeLiteral... 时需要 TypeLiteral 的匿名子类才能保留泛型类型信息。
【讨论】: