如何在 Kotlin 中注入原始变量?

Posted

技术标签:

【中文标题】如何在 Kotlin 中注入原始变量?【英文标题】:How to inject primitive variables in Kotlin? 【发布时间】:2017-11-26 19:19:54 【问题描述】:

我在我的 android 应用程序中将 Dagger2 用于 DI,并且使用此代码将类注入到我的 Activity 中很好:

@field:[Inject ApplicationContext]
lateinit var context: Context

但是,lateinit Kotlin 中的原始类型属性不允许使用修饰符(例如 Boolean),我该怎么做?

@field:[Inject Named("isDemo")]
lateinit var isDemo: Boolean

当我从此代码中删除 lateinit 时,我收到此错误 Dagger does not support injection into private fields

【问题讨论】:

@JvmField @field:[Inject Named("isDemo")] var isDemo: Boolean = false @Miha_x64 以及 Inject 和 Named 注释在哪里?! @Miha_x64 谢谢,它有效! @Miha_x64 请添加您的答案。给 cmets 点赞太无聊了。 【参考方案1】:

首先,您不需要lateinit,您可以将其保留为var,并使用任意值进行初始化。 其次,您必须公开一个字段以允许 Dagger 在那里注入。 所以,这是解决方案:

@JvmField // expose a field
@field:[Inject Named("isDemo")] // leave your annotatios unchanged
var isDemo: Boolean = false // set a default value

【讨论】:

如果您想保护仅在(子)类中访问(和更改)的属性,也许您应该考虑protected true - 与 Dagger 一起使用,因为这不会导致private 这行得通。谢谢。这有点乱。希望 dagger/kotlin 解决这个问题。【参考方案2】:

接受的答案对我不起作用,但以下方法效果很好:

@set:[Inject Named("isDemo")]
var isDemo: Boolean = false

Source

【讨论】:

对我来说,只接受接受的答案,而不是你的。在您的情况下,我收到错误“Dagger 不支持注入私有字段”

以上是关于如何在 Kotlin 中注入原始变量?的主要内容,如果未能解决你的问题,请参考以下文章