web-dev-qa-db-fra.com

Dagger 2 multibindings avec Kotlin

J'ai l'extrait de code suivant dans mon module dagger 2

@Singleton
@Provides
@ElementsIntoSet
fun providesQueries(foo: Foo): Set<Foo>{
    val queries = LinkedHashSet<Foo>()
    queries.add(foo)
    return queries
}

J'essaye d'injecter de cette façon

@Inject lateinit var foo: Set<Foo>

Mais la dague affiche une erreur indiquant que Dague ne peut pas fournir Java.util.Set sans la méthode @Provides ou @Produces.

J'ai fait la même chose en Java et cela a fonctionné. Quelqu'un sait-il pourquoi il échoue?

32
Borja

Comme il est décrit dans le Kotlin référence

Pour faire fonctionner les API Kotlin dans Java nous générons Box<Super> comme Box<? extends Super> pour une définition covariante Box (ou Foo<? super Bar> pour Foo défini de manière contraire) lorsqu'il apparaît en tant que paramètre.

Vous pouvez utiliser @JvmSuppressWildcards pour l'éviter, comme suit:

@Inject lateinit var foo: Set<@JvmSuppressWildcards Foo>
67
Aleksandr