从 Google Guice 获取通配符实例

Get a wildcard instance from Google Guice

嗨,我正在试验 Google Guice 5.x。我的 class 定义为:

public class Foo<T> {
    // some logic here
}

它正在其他 class 中使用,例如:

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<?> 的实例。

有没有办法配置 Google Guice 以使用 Foo<Chocolate> 的实例解析 Foo<?>

绑定类型:

@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;
}