Guice annotatedWith 用于与泛型的接口(interface)

标签 guice

我有一个接口(interface) TestInterface 有许多实现,当我使用 Guice 进行绑定(bind)时,我收到一条消息说 TestInterface 未绑定(bind)到实现。以下是我用来将接口(interface)与其实现绑定(bind)的语法。

bind(TestInterface.class).annotatedWith(Names.named("Impl1Test")).to(Impl1.class);

p.s.我用一个虚拟接口(interface)进行了测试,但没有泛型,它工作得很好,我认为泛型需要做一些特殊的事情。

最佳答案

绑定(bind)泛型类型时,需要使用 TypeLiteral而不是原始的class .否则,Guice 将无法区分泛型类型。在您的情况下,它看起来像这样:

bind(new TypeLiteral<TestInterface<Impl1, Impl2>>(){})
    .annotatedWith(Names.named("Impl1Test"))
    .to(Impl1.class);

您甚至可能不需要 annotatedWith如果您没有其他要绑定(bind)为 TestInterface<Impl1, Impl2> 的内容.注意 {}在创建 TypeLiteral ... TypeLiteral 的匿名子类为了保留泛型类型信息是必要的。

关于Guice annotatedWith 用于与泛型的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4967350/

相关文章:

java - Maven、CDI、JUnit、JPA。想要针对 HSQLDB 运行测试

java - Guice动态绑定(bind),获取实例

java - 我如何重写此代码片段,以便我不手动/显式调用注入(inject)器?

java - 使用Guice : No implementation bounded

scala - 播放框架 2.5.x : Inject Environment in a Module

java - Guice @Provides 方法不起作用

java - 如何为接口(interface)的实现创建多个实例?

java - 如何从 Guice 的注入(inject)器中检索带注释的实例?

java - 你有什么替代注释的方法?

java - GWT google-gin 字段注入(inject)不起作用