首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kotlin开发遇到问题汇总

Kotlin开发遇到问题汇总

作者头像
ppjun
发布2018-09-05 11:59:24
5510
发布2018-09-05 11:59:24
举报
文章被收录于专栏:ppjun专栏ppjun专栏ppjun专栏

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
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.03.06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. dagger2的@Named,无法使用
  • 解决方法:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档