属性必须初始化或抽象

如何声明 class 字段? 就像我们可以在 java 中使用它一样:

protected SharedPreferences mSharedPreferences;

接下来是 onCreate():

mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)

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

我在 Kotlin 也试着这么做:

protected var sharedPreferences : SharedPreferences

onCreate():

sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)

但是我得到一个警告: “属性必须是初始化的或者是抽象的”

56129 次浏览

如果您想在构造函数之外初始化一个属性,那么 后期初始化属性就是您要寻找的。使用 lateinit修饰符声明属性,这将允许跳过其他所需的初始值设定项,并使属性访问异常失败,直到分配给它一些有意义的值:

protected lateinit var sharedPreferences: SharedPreferences

从 Alexander Udalov 关于可见性的回答的评论中得出这个结论。 对于可空属性:

protected var sharedPreferences : SharedPreferences? = null

然后再给它赋值。