我正在尝试使用Dagger2以下结构设置一个非常基本的字段注入:
class ToInject {}
Run Code Online (Sandbox Code Playgroud)
class Injected {
@Inject
var toInject: ToInject? = null
}
Run Code Online (Sandbox Code Playgroud)
@Module
object BaseModule {
var toInject: ToInject? = null
@Provides
@JvmStatic
fun toInjectProvider(): ToInject {
if (toInject == null) {
toInject = ToInject()
}
return toInject as ToInject
}
}
Run Code Online (Sandbox Code Playgroud)
我试图注入的字段肯定是PUBLIC但编译器返回以下错误
Dagger 不支持注入私有字段
任何人都可以解释为什么我会收到此错误以及如何解决它?
BTW 构造函数注入工作:
class Injected @Inject constructor(var toInject: ToInject){}
Run Code Online (Sandbox Code Playgroud)
尝试显式注释 setter 方法:
class Injected {
@set:Inject
var toInject: ToInject? = null
}
Run Code Online (Sandbox Code Playgroud)
或者
class Injected {
var toInject: ToInject? = null
@Inject set
}
Run Code Online (Sandbox Code Playgroud)
您还可以将您的字段注释为@JvmField:
class Injected {
@JvmField
@Inject
var toInject: ToInject? = null
}
Run Code Online (Sandbox Code Playgroud)
问题是如何将 Kotlin 翻译成 Java。
这个 Kotlin 类:
class Injected {
var toInject: ToInject? = null
}
Run Code Online (Sandbox Code Playgroud)
实际上变成了这个Java类:
class Injected {
@set:Inject
var toInject: ToInject? = null
}
Run Code Online (Sandbox Code Playgroud)
因此,尽管您在 Kotlin 中将字段设置为公开,但实际上它只是一个带有公共 setter 和 getter 的私有字段。
| 归档时间: |
|
| 查看次数: |
1403 次 |
| 最近记录: |