kotlin 限定符注解被忽略

kotlin qualifier annotaion is ignored

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

Error:SomeObject is bound multiple times:

@Provides @NotNull SomeObject SomeModule.provideSomeObject()

@Provides @NotNull SomeObject SomeModule.provideSomeScopedObject()

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

在 java 中编写组件和模块时没有帮助,因为在 Main class 中忽略注释。

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