属性 必须初始化或抽象
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
...稍后为其赋值。
如何声明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
...稍后为其赋值。