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?
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>
commeBox<? extends Super>
pour une définition covarianteBox
(ouFoo<? 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>