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 中的默认保留,因此无需明确指定)。
下面的代码第一次编译但在第二次构建时失败给出:
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 中的默认保留,因此无需明确指定)。