android - Dagger 2 与 Kotlin 的多重绑定(bind)

标签 android kotlin dagger-2

我的 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> as Box<? extends Super> for covariantly defined Box (or Foo<? 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/

相关文章:

android - 如何在recyclerView 中实现复选框?

android - 视频完成的监听器(或处理程序)

android - 当我使用 setText() 时 TextView 会改变大小

java - Dagger 2 瞄准镜使用生命周期

java - Android 条件字符串的验证

firebase - 如何从 Firebase 数据库中检索数据并将其存储在 ListArray<Class> 中? - Kotlin

java - Kotlin ||如何区分 View id 和 Android 中的类似 switch 语句的 onClick()?

java - 我的巴蒂斯。结果映射和属性

android - 使用 mvp、dagger 2 和 RxJava 的无限滚动回收器 View 的模板代码

java - Kotlin androidTest : Tests ran to completion. 空测试套件