嗨,我正在試驗Google Guice 5.x。我的班級定義為:
public class Foo<T> {
// some logic here
}
它正在其他類中使用,例如:
public class Bar {
private final Foo<Chocolate> provider;
public Bar(Foo<Chocolate> _choco) {
this.provider = _choco;
}
}
public abstract class BaseZoo { // in some other package in a different jar
private final Injector injector = Guice.createInjector(new MyAppModule());
private Foo<?> provider;
public String doSomething() {
if (provider == null)
this.provider = this.injector.getInstance(Foo.class);
// some other code logic.
}
}
現在,在我的模塊檔案( MyAppModule) 中,我將 Foo 定義為:
@Inject
@Provides
@Singleton
public Foo<Chocolate> getFoo(FooDependency fooDep) {
return new Foo<>(fooDep);
}
現在,當我運行我的代碼時,Google Guice 能夠找到一個實體,Foo<Chocolate>但無法找到Foo<?>.
是否存在一種配置谷歌吉斯以解決方式Foo<?>與實體Foo<Chocolate>?
uj5u.com熱心網友回復:
系結型別:
@Inject
@Provides
@Singleton
public Foo<?> getFoo(FooDependency fooDep) { ... }
如果您仍然想系結Foo<Chocolate>,請使用問題中的@Provides方法,但也系結Foo<?>到它,您可以在配置方法中執行此操作:
bind(new Key<Foo<?>>() {}).to(new Key<Foo<Chocolate>>() {});
或者,使用提供程式方法:
@Provides
Foo<?> provideWildcardFoo(Foo<Chocolate> chocolateFoo) {
return chocolateFoo;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/377761.html
