lateinit
是Kotlin中的一个关键字,用于延迟初始化一个非空属性,直到它被实际使用
build.gradle
文件中添加以下依赖:dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
}
lateinit
关键字修饰它。例如:class MyViewModel : ViewModel() {
lateinit var myData: String
}
在这个例子中,我们声明了一个名为myData
的非空属性,并使用lateinit
关键字修饰它。这意味着我们还没有为它分配任何值。
lateinit
属性的地方,使用requireNotNull()
函数来确保属性已经被初始化。例如,在MyViewModel
类中,我们可以添加一个方法来获取数据并确保myData
已经被初始化:fun getData(): String {
return requireNotNull(myData) {
"myData has not been initialized"
}
}
在这个方法中,我们使用requireNotNull()
函数来检查myData
是否已经被初始化。如果没有,它会抛出一个异常并显示一条错误消息。
MyViewModel
类,并在需要的地方调用getData()
方法来获取数据。例如:class MyActivity : AppCompatActivity() {
private lateinit var viewModel: MyViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
viewModel = ViewModelProvider(this).get(MyViewModel::class.java)
// 获取数据并显示在UI上
val data = viewModel.getData()
textView.text = data
}
}
在这个例子中,我们首先使用ViewModelProvider
来获取MyViewModel
的实例。然后,我们调用getData()
方法来获取数据,并将其显示在UI上。
总结一下,lateinit
允许你在需要时才初始化一个非空属性,而requireNotNull()
函数确保在使用该属性之前,它已经被成功初始化。