我的dagger 2模块中有以下代码段
@Singleton
@Provides
@ElementsIntoSet
fun providesQueries(foo: Foo): Set<Foo>{
val queries = LinkedHashSet<Foo>()
queries.add(foo)
return queries
}
我试着以这种方式注入
@Inject lateinit var foo: Set<Foo>
但是dagger显示一个错误,表示Dagger无法在没有@Provides或@Produces方法的情况下提供java.util.Set。
我在java中也做了同样的工作。有人知道为什么会失败吗?
答案 0 :(得分:59)
正如Kotlin reference
中所描述的那样为了使Kotlin API在Java中工作,我们生成
Box<Super>
asBox<? extends Super>
用于协同定义Box
(或Foo<? super Bar>
for 当它作为参数出现时,它被反对地定义为Foo。
您可以使用@JvmSuppressWildcards
来避免它,如下所示:
@Inject lateinit var foo: Set<@JvmSuppressWildcards Foo>