Dagger 2 与 Kotlin 的多重绑定

Dagger 2 multibindings with Kotlin

我的 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 中做了同样的事情,并且成功了。有人知道为什么会失败吗?

如 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>