博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Kotlin开发遇到问题汇总
阅读量:7066 次
发布时间:2019-06-28

本文共 1073 字,大约阅读时间需要 3 分钟。

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,本文不定时更新。

转载地址:http://ywoll.baihongyu.com/

你可能感兴趣的文章
PHP GD 生成图片验证码+session获取储存验证码
查看>>
【web开发学习笔记】Structs2 Result学习笔记(一)简介
查看>>
android studio中取消关联git
查看>>
Mysql的共享锁和排他锁(转载)
查看>>
Effective C++--经验条款
查看>>
vue 项目中 自定义 webpack 的 配置文件(webpack.config.babel.js)
查看>>
考虑使用jruby
查看>>
深挖洞,广积粮,不称霸
查看>>
执行计划组件、组件、老化
查看>>
分享几个Tooltips插件
查看>>
初探Object Pascal的类(一)
查看>>
Android RenderScript 的使用基础篇
查看>>
MyEclipse6.0.1中SSH项目的配置 (转)
查看>>
HDOJ-1399 Starship Hakodate-maru
查看>>
Android系统Intent中的Uri使用
查看>>
silverlight 数据库更新,UI控件同步更新
查看>>
Android中GridView的实现实例
查看>>
makefile编写---.so动态库的生成和调用
查看>>
AESDK开发之UI消息响应
查看>>
apacheBench对网站进行压力测试
查看>>