Kotlin开发遇到问题汇总

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"),同理你也可以用@field:FS来标记,也是成功的。而@Module类里面的方法继续用@Named来标注最后修改就成功了。

方法一:

//BeanModule.kt
@Named("fs")
@Provides
fun showCityFS(): City {
    var city = City()
    city.setName("fs")
    return city
}

//MainActivity.kt
   @Inject @field:Named("fs")
    lateinit var city: City

方法二:

//BeanModule.kt
@FS
@Provides
fun showCityFS(): City {
    var city = City()
    city.setName("fs")
    return city
}
//MainActivity.kt
   @Inject @field:FS
    lateinit var city: City
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 最近口碑很好的一部动画电影《寻梦环游记》正在优酷热映。瑞图小编先在电影院看完后又重回优酷看了一遍,看着看着泪花闪出...
    栩樦阅读 439评论 0 0
  • 郭神CSDN博客刚看到郭大神换了CSDN博客头像,恭喜郭大神步入婚姻殿堂。祝:永结同心,百年好合!新婚愉快,甜甜蜜...
    Magee_yuan阅读 1,574评论 5 3
  • 朋友聊天,问我:假如给我十万块钱,叫我再去读高中,能不能考上重点大学? 我笑他,假如再给我机会,能让我像二十年前一...
    钻牛角尖的Mark阅读 246评论 1 0
  • 原文摘录(P112): “勤奋、运气或灵活的手腕 固然重要,却非关键, 唯有掌握重点才是成功的不二法门。 辨别事情...
    Anita_Tang阅读 198评论 0 0