1. dagger2的@Named,无法使用
在Kotlin使用Dagger2的时候,因为用@Module标注的类里面有返回两个类型一样的方法,需要用@Named来分开标注,不然,会build的时候报错。在正常情况下,用@Named(''example1")来标注method1;用@Named("example2")来标注method2。然后用到的地方用@Inject@Named("example1")来标注。就完成依赖了。可是到了kotlin发现空指针,没有依赖成功。我又试了一下@Qualifier自定义一个注解。因为@Named也是依赖了@Qualifier来生成的。
java是这样子生成一个注解的
@Qualifier@Retention(RetentionPolicy.RUNTIME)@interface FS {}复制代码
kotlin是这样子生成一个注解的
@Qualifier@Retention(RetentionPolicy.RUNTIME)internal annotation class FS复制代码
然后我用@FS代替@Named来标注方法和变量,运行后一样是没依赖成功,返回空指针异常。
解决方法:
然后在dagger2的issue里面提到@Named配合@Inject要这样子用@Inject @field:Named("example1"),而@Module类里面的方法继续用@Named来标注最后修改就成功了。同理你也可以用@field:FS来标记,也是成功的。
方法一:
//BeanModule.kt@Named("fs")@Providesfun showCityFS(): City { var city = City() city.setName("fs") return city}//MainActivity.kt @Inject @field:Named("fs") lateinit var city: City复制代码
方法二:
//BeanModule.kt@FS@Providesfun showCityFS(): City { var city = City() city.setName("fs") return city}//MainActivity.kt @Inject @field:FS lateinit var city: City复制代码
Thanks for your watching,本文不定时更新。