我在https://google.github.io/dagger/multibindings中使用了示例
模块A
@Module
object MyModuleA {
@Provides
@IntoSet
fun provideOneString(): String {
return "ABC"
}
}
模块B
@Module
object MyModuleB {
@Provides
@ElementsIntoSet
fun provideSomeStrings(): Set<String> {
return HashSet<String>(Arrays.asList("DEF", "GHI"))
}
}
组件
@Component(modules = [ MyModuleA::class, MyModuleB::class])
interface MyComponent {
fun strings(): Set<String>
}
测试
@Test
fun testMyComponent() {
val myComponent = DaggerMyComponent.builder().build()
println("${myComponent.strings()}")
}
它显示必须设置MyModuleA错误,但将模块从对象更改为类可以很好地工作。
@Module
class MyModuleA {
@Provides
@IntoSet
fun provideOneString(): String {
return "ABC"
}
}
@Module
class MyModuleB {
@Provides
@ElementsIntoSet
fun provideSomeStrings(): Set<String> {
return HashSet<String>(Arrays.asList("DEF", "GHI"))
}
}
@IntoSet注解在kotlin对象中不起作用吗?
发布于 2019-01-25 18:41:15
我遇到了同样的问题,这个答案为我解决了这个问题。
Dagger 2 multibindings with Kotlin
简而言之,由于Set<@JvmSuppressWildcards在泛型中处理类型差异的方式,您需要使用String> intead。
https://stackoverflow.com/questions/50343592
复制