Dagger 2モジュールに次のスニペットがあります
@Singleton
@Provides
@ElementsIntoSet
fun providesQueries(foo: Foo): Set<Foo>{
val queries = LinkedHashSet<Foo>()
queries.add(foo)
return queries
}
このように注入してみます
@Inject lateinit var foo: Set<Foo>
しかし、daggerは、@ Providesまたは@ProducesメソッドなしでDaggerがJava.util.Setを提供できないことを示すエラーを示します。
私はJava=でも同じことをしましたが、うまくいきました。なぜ失敗したのか誰かが知っていますか?
Kotlinで説明されているように 参照
Kotlin APIをJavaで動作させるには、共変的に定義された
Box
の場合はBox<Super>
としてBox<? extends Super>
を生成します(または、反変的に定義されたFooの場合はFoo<? super Bar>
)パラメータとして表示される場合。
次のように、@JvmSuppressWildcards
を使用して回避できます。
@Inject lateinit var foo: Set<@JvmSuppressWildcards Foo>