这是一个很好的用例
lateinit。标记属性
lateinit可以使它成为不可为空的,但在调用Activity的构造函数时不为其赋值。正是在像Activity之类的类中,当初始化是在单独的初始化方法中发生,而不是在构造函数运行之后(在本例中为
onCreate)时。
private lateinit var btnProceed: Button
如果在分配实值之前读取了该属性,它将在运行时引发异常-通过使用
lateinit,您有责任在首次访问它之前对其进行初始化。
否则,如果希望编译器为您保证安全访问,则可以使
Buttonnull为默认值,就像转换器所做的那样。但是,应该使用安全调用运算符来访问该属性,而不要使用转换器通常使用的不安全
!!运算符:
btnProceed?.setonClickListener { ... }如果
btnProceed为非null值,则将进行常规调用,否则不执行任何操作。
最后一点,您可以查看Kotlin Android扩展
View,如果它适用于您的项目,则无需完全为您创建属性。
上一次编辑(目前):您还应该
lazy按照中所述使用。懒惰很酷。
other
answers



