我有一个简单的层次结构,如下所示:
public abstract class AbsFoo {
protected AbsBoo boo;
}
public class Foo extends AbsFoo {
public Foo() {
boo = new Boo(); // Boo extends AbsBoo
}
}
编辑:应即时创建 AbsFoo 的实例,并且可能不是字段
我可以用注入(inject)替换
boo = new Boo()
吗? 最佳答案
是的:
public abstract class AbsFoo {
protected AbsBoo boo;
}
public class Foo extends AbsFoo {
@Inject
public Foo(Boo boo) {
super.boo = boo; // Boo extends AbsBoo
}
}
确保您使用 @Inject 或 injector.getInstance() 构建您的 Foo 实例
编辑
您还可以使用提供程序按需创建实例:
@Inject
Provider<Foo> fooProvider
//...
public void doSomething(){
//need new foo:
Foo foo = fooProvider.get();
}
关于dependency-injection - Guice - 如何从 child 的 parent 中注入(inject)抽象字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10667632/