财产必须初始化或是抽象的

时间:2015-11-21 23:21:58

标签: android kotlin

这一定是个愚蠢的问题,但我对Kotlin来说真的很新,我找不到任何解决方案。

如何声明类字段?就像我们可以在java中一样:

protected SharedPreferences mSharedPreferences;

稍后在onCreate()

mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)

现在我可以在任何我想要的地方使用它(在这个基本活动的子类中)。

我尝试在Kotlin做同样的事情:

protected var sharedPreferences : SharedPreferences

onCreate()

sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)

但我得到一个警告:"财产必须初始化或是抽象的"

2 个答案:

答案 0 :(得分:139)

如果您想在构造函数外部初始化属性,那么late-initialized properties就是您可能正在寻找的内容。使用lateinit修饰符声明属性,这将允许跳过其他必需的初始化程序,并使属性访问失败,异常,直到为其分配了一些有意义的值:

protected lateinit var sharedPreferences: SharedPreferences

答案 1 :(得分:2)

将其从Alexander Udalov答案的可见性中删除。 对于可为空的属性:

protected var sharedPreferences : SharedPreferences? = null

...然后再为其分配一个值。