0

是否可以在 Dagger 2 中注入超类型?

如果我有这样的财产

@Inject
Wallet<Material>

以下提供工作吗?

@Provides
Wallet<LeatherMaterial> provide()
{
return new Wallet<LeatherMaterial>
}

其实我应该改写这个问题。它不起作用,我收到一个错误,需要注入确切的钱包

我们有什么解决方法吗?. koin 是否提供一些这样的功能?

4

1 回答 1

2

是的,你需要明确。Wallet<LeatherMaterial>如果您的依赖关系图中某处已经有,请将以下内容添加到您的模块中:

@Binds abstract Wallet<Material> provide(Wallet<LeatherMaterial> leatherWaller);

否则,请使用:

@Provides static Wallet<Material> provide() {
    return new Wallet<LeatherMaterial>(){ /* ... */ };
}

编辑: 重新访问这个答案,因为我发现我提供的解决方案由于 Java 中如何处理泛型而无法工作。相反,您需要使用:

Wallet<? extends Material>代替Wallet<Material>我上面的答案,并且在注入的任何地方都做同样的事情。

于 2019-01-30T12:58:48.477 回答