我的 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>
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>
https://stackoverflow.com/questions/43141740/
相关文章:
variables - 在 Kotlin 中一次定义多个变量(例如 Java : String x,
list - 在 Kotlin 中,如何在迭代时修改列表的内容
java - 如何将 Java 赋值表达式转换为 Kotlin
android - Kotlin 等价于 Java 的 equalsIgnoreCase
java - Android Studio 3.1.3 - Unresolved reference
spring - Kotlin 和 Spring Boot @ConfigurationProper
gradle - 如何使用 kotlinscript DSL (build.gradle.kts)