【问题标题】:kotlin qualifier annotaion is ignoredkotlin 限定符注释被忽略
【发布时间】:2016-04-26 21:13:48
【问题描述】:

下面的代码第一次编译,但在第二次构建失败:

错误:SomeObject 被多次绑定:

@Provides @NotNull SomeObject SomeModule.provideSomeObject()

@Provides @NotNull SomeObject SomeModule.provideSomeScopedObject()

编译器似乎在连续构建时忽略了Qualifier 注释。

组件和模块用java编写时没有帮助,因为Main类中的注释被忽略了。

@dagger.Component(modules = arrayOf(SomeModule::class))
interface Component {
    fun inject(main: Main)
}

class Main {
    @field:[javax.inject.Inject SomeScope] lateinit var obj: SomeObject
}

@dagger.Module
class SomeModule {

    @dagger.Provides
    fun provideSomeObject(): SomeObject {
        return SomeObject("noScope")
    }

    @SomeScope
    @dagger.Provides
    fun provideSomeScopedObject(): SomeObject {
        return SomeObject("someScope")
    }
}

data class SomeObject(val name: String)

@javax.inject.Qualifier
@Retention(AnnotationRetention.SOURCE)
annotation class SomeScope

【问题讨论】:

    标签: kotlin dagger-2


    【解决方案1】:

    请尝试删除此行@Retention(AnnotationRetention.SOURCE)。据我所知,Dagger 2 需要 RUNTIME 保留(这是 Kotlin 中的默认设置,因此无需明确指定)。

    【讨论】:

    • 谢谢,现在的问题是为什么SOURCE retension 在 java 上运行良好
    猜你喜欢
    • 1970-01-01
    • 2013-11-23
    • 2012-05-19
    • 2013-04-09
    • 2015-01-09
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多