java - 如何使用 GinFactoryModuleBuilder 从 Google Gin 获取扩展子类?

标签 java gwt dependency-injection guice gwt-gin

GinFactoryModuleBuilder 类注释如下:

In difference to regular Guice Assisted Inject, in Gin, return types in your factory are not further resolved using your regular injector configuration. This means that in the following example you'll still get a Chicken and not a Rooster:

interface Animal {}
 public class Chicken implements Animal {}
 public class Rooster extends Chicken {}
 interface AnimalFactory {
   Animal getAnimal();
 }
 ...
 protected void configure() {
   bind(Chicken.class).to(Rooster.class);
   install(new GinFactoryModuleBuilder()
       .implement(Animal.class, Chicken.class)
       .build(AnimalFactory.class));
 }

有没有办法在 Gin 中获得 Rooster 类?怎么样:

install(new GinFactoryModuleBuilder()
        .implement(Animal.class, Rooster.class)
        .build(AnimalFactory.class));

在我的代码中:

@Inject
AnimalFactory f;
Animal rooster = f.getAnimal();

如何创建公鸡?

如何使用 GinFactoryModuleBuilder 从 Google Gin 获取扩展子类?

最佳答案

您可以从配置方法中删除所有内容,只保留以下内容:

install(new GinFactoryModuleBuilder()
  .implement(Animal.class, Rooster.class)
  .build(AnimalFactory.class));

然后像从工厂获取 Rooster 实例一样使用工厂。

或者,您可以更改工厂方法以返回 Rooster 并更改配置,如下所示,然后像您一样使用工厂:-

interface AnimalFactory {
   Rooster getAnimal();
 }
 ...
 protected void configure() {
   install(new GinFactoryModuleBuilder().build(AnimalFactory.class));
 }

关于java - 如何使用 GinFactoryModuleBuilder 从 Google Gin 获取扩展子类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27846356/

相关文章:

java - 返回一个在 for 循环中被 st 的整数

java - 将持久化实体更改为同级子类

events - gwt 中的 Window.alert() 事件

java - 如何加快 gwt 编译器的速度?

java - Dagger 2 : Using factory methods in place of public constructors

c# - IPackage 类实现中的简单注入(inject)器依赖注入(inject)

java - Java 中的 PCA 实现

java - 是否可以编写一个在有结果时提前退出的 Java 收集器?

gwt - 如何通过 RPC 使用 GWT 建议框?

java - 对象池、IoC 和工厂 : When and Where?