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

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

https://stackoverflow.com/questions/43141740/

相关文章:

string - Kotlin 多行字符串中的模板转义

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)

constructor - Kotlin 数据类可以有多个构造函数吗?

kotlin - 字符串插值在 Kotlin 中是如何工作的?