Я использовал пример в https://google.github.io/dagger/multibindings
Модуль А
@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?
Это работает, и я посмотрю на собранный код. Кажется, что Dagger создает экземпляр объекта, тогда Dagger получает значение null.





Я столкнулся с той же проблемой, и этот ответ решил ее для меня.
Dagger 2 multibindings с котлином
Короче говоря, вам нужно использовать Set <@JvmSuppressWildcards String> intead из-за того, как kotlin обрабатывает вариацию типов в дженериках.
Попробуйте пометить функции в модулях
objectс помощью@JvmStatic, и он должен работать