GinFactoryModuleBuilder类注释说明如下:
与常规Guice Assisted Inject不同,在Gin中,返回类型 在你的工厂没有使用常规注射器进一步解决 组态。这意味着在下面的例子中你仍然会 得到一只鸡而不是一只公鸡:
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)); }
有没有办法让杜松子酒中的鸡蛋?怎么样:
install(new GinFactoryModuleBuilder()
.implement(Animal.class, Rooster.class)
.build(AnimalFactory.class));
在我的代码中:
@Inject
AnimalFactory f;
Animal rooster = f.getAnimal();
如何制作公鸡?
如何使用GinFactoryModuleBuilder从Google Gin获取扩展SubClass?
答案 0 :(得分:1)
您可以从configure方法中删除所有内容,并仅保留以下内容:
install(new GinFactoryModuleBuilder()
.implement(Animal.class, Rooster.class)
.build(AnimalFactory.class));
然后像你一样使用工厂从工厂获得Rooster的实例。
或者,您可以更改工厂方法以返回Rooster&按如下方式更改configure,并像以前一样使用工厂: -
interface AnimalFactory {
Rooster getAnimal();
}
...
protected void configure() {
install(new GinFactoryModuleBuilder().build(AnimalFactory.class));
}