属性 必须初始化或抽象

Property must be initialized or be abstract

如何声明class字段?就像我们可以在 java:

protected SharedPreferences mSharedPreferences;

之后 onCreate()

mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)

现在我可以在任何我想使用的地方使用它(在这个基地 activity 的子 class 中)。

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

protected var sharedPreferences : SharedPreferences

onCreate()中:

sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)

但我收到警告:“属性 必须初始化或抽象”

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

protected lateinit var sharedPreferences: SharedPreferences

从亚历山大·乌达洛夫 (Alexander Udalov) 的回答的评论中提取此内容以提高可见性。 对于可为 null 的属性:

protected var sharedPreferences : SharedPreferences? = null

...稍后为其赋值。