31 votes

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é. Est-ce que quelqu'un sait pourquoi cela échoue?

72voto

Aleksandr Points 626

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

Pour faire Kotlin Api en langage Java, nous générons Box<Super> comme Box<? extends Super> pour covariantly définis Box (ou Foo<? super Bar>pour contravariantly défini Foo) lorsqu'il apparaît en tant que paramètre.

Vous pouvez utiliser @JvmSuppressWildcards pour l'éviter, tout comme les suivants:

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X