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中的默认保留,因此不需要明确指定)。