作者:手机用户2602918063 | 来源:互联网 | 2023-02-07 20:57
我的匕首2模块中有以下片段
@Singleton
@Provides
@ElementsIntoSet
fun providesQueries(foo: Foo): Set{
val queries = LinkedHashSet()
queries.add(foo)
return queries
}
我试着以这种方式注入
@Inject lateinit var foo: Set
但是匕首显示一个错误,表示Dagger无法在没有@Provides或@Produces方法的情况下提供java.util.Set.
我在java中也做了同样的工作.有人知道为什么会失败吗?
1> 小智..:
正如它在Kotlin 参考文献中所描述的那样
为了使Kotlin API在Java中工作,我们生Box
成为
当它作为参数出现时的Box extends Super>
协变定义Box
(或Foo super Bar>
用于逆变定义的Foo).
您可以使用@JvmSuppressWildcards
它来避免它,如下所示:
@Inject lateinit var foo: Set<@JvmSuppressWildcards Foo>
耶稣基督,浪费了2天!为什么这么痛苦......谢谢!如果像我这样的人正在努力解决多绑定`Map`问题,那几乎就是同样的伎俩.例如:`类MviViewModelFactory @Inject构造函数(私有val提供者:Map
,@ JvmSuppressWildcards Provider >):ViewModelProvider.Factory {`
也可以使用MutableSet <>