kotlin限定符注释被忽略
下面的代码编译第一次,但在第二次构建给出:
错误: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
请尝试删除这一行@Retention(AnnotationRetention.SOURCE)
。 就我所知,Dagger 2需要RUNTIME
保留(这是Kotlin中的默认保留,因此不需要明确指定)。