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

Ant*_*nko 103 android kotlin

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

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

protected SharedPreferences mSharedPreferences;
Run Code Online (Sandbox Code Playgroud)

后来在onCreate():

mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)
Run Code Online (Sandbox Code Playgroud)

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

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

protected var sharedPreferences : SharedPreferences
Run Code Online (Sandbox Code Playgroud)

并在onCreate():

sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)
Run Code Online (Sandbox Code Playgroud)

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

Ale*_*lov 163

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

protected lateinit var sharedPreferences: SharedPreferences
Run Code Online (Sandbox Code Playgroud)

  • 不同之处在于您可以使用lateinit声明不可为空的值. (27认同)
  • 我尝试使用"protected var sharedPreferences:SharedPreferences?= null"它也有效,有什么区别? (10认同)

Tom*_*ard 11

将其从亚历山大·乌达洛夫(Alexander Udalov)的答案中删除,以提高知名度。对于可为空的属性:

protected var sharedPreferences : SharedPreferences? = null

...然后为它分配一个值。