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>
我的 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>
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>