是否可以在 Dagger 2 中注入超类型?
如果我有这样的财产
@Inject
Wallet<Material>
以下提供工作吗?
@Provides
Wallet<LeatherMaterial> provide()
{
return new Wallet<LeatherMaterial>
}
其实我应该改写这个问题。它不起作用,我收到一个错误,需要注入确切的钱包
我们有什么解决方法吗?. koin 是否提供一些这样的功能?
是的,你需要明确。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>
我上面的答案,并且在注入的任何地方都做同样的事情。