2016-04-26 108 views
1
下面

代码编译的第一次,但未能在第二次构建,并提供:科特林预选赛annotaion被忽略

Error:SomeObject is bound multiple times:

@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 

回答

1

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

+0

谢谢,现在的问题是为什么'SOURCE' retension在java上工作得很好 – Sigitas