【问题标题】:dagger @IntoSet not work in kotlin object?匕首 @IntoSet 在 kotlin 对象中不起作用?
【发布时间】:2018-05-15 06:26:35
【问题描述】:

我用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 对象中不起作用?

【问题讨论】:

  • 尝试用@JvmStatic标记object模块中的功能,它应该可以工作
  • 它有效,我看看构建的代码。 Dagger 似乎创建了对象的实例,然后 Dagger 得到了 null。

标签: kotlin dagger-2


【解决方案1】:

我遇到了同样的问题,这个答案为我解决了。

Dagger 2 multibindings with Kotlin

简而言之,您需要使用 Set,因为 kotlin 在泛型中处理类型差异的方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-09
    相关资源
    最近更新 更多