我的 dagger 2 模块中有以下代码段
@Singleton
@Provides
@ElementsIntoSet
fun providesQueries(foo: Foo): Set<Foo>{
val queries = LinkedHashSet<Foo>()
queries.add(foo)
return queries
}
我尝试用这种方式注入(inject)
@Inject lateinit var foo: Set<Foo>
但是 dagger 显示一个错误,说 Dagger 不能在没有 @Provides 或 @Produces 方法的情况下提供 java.util.Set。
我在 java 中也做了同样的事情,而且效果很好。有人知道为什么会失败吗?
最佳答案
正如 Kotlin reference 中所述
To make Kotlin APIs work in Java we generate
Box<Super>
asBox<? extends Super>
for covariantly definedBox
(orFoo<? super Bar>
for contravariantly defined Foo) when it appears as a parameter.
您可以使用 @JvmSuppressWildcards
为了避免它,如下所示:
@Inject lateinit var foo: Set<@JvmSuppressWildcards Foo>
关于android - Dagger 2 与 Kotlin 的多重绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43141740/