我想知道是否有办法检查lateinit变量是否已初始化.
class Foo() {
private lateinit var myFile: File
fun bar(path: String?) {
path?.let { myFile = File(it) }
}
fun bar2() {
myFile.whateverMethod()
// May crash since I don't know whether myFile has been initialized
}
}
Run Code Online (Sandbox Code Playgroud) 我目前正在我的应用程序中使用Realm,为了确保我正确管理Realm实例,我在我的基本Activity中引入了一个如下变量:
protected val realm: Realm by lazy {
Realm.getDefaultInstance()
}
Run Code Online (Sandbox Code Playgroud)
然后在onDestroy中我这样做:
override fun onDestroy() {
super.onDestroy()
realm.close()
}
Run Code Online (Sandbox Code Playgroud)
然后我意识到这是一种浪费.如果当前活动不使用领域,它将打开并立即关闭onDestroy.
所以我更新到这个:
private var usedRealm = false
protected val realm: Realm by lazy {
usedRealm = true
Realm.getDefaultInstance()
}
override fun onDestroy() {
super.onDestroy()
if (usedRealm) {
realm.close()
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法完成同样的事情,没有额外的旗帜?
在某些情况下,不需要我的广播接收器,因此需要检查接收器是否为空,但不知何故该对象不为空,即使不使用它并导致崩溃。
Run Code Online (Sandbox Code Playgroud)private val myBroadCastReceiver by lazy { MyBroadcastReceiver() } if(myBroadCastReceiver != null) unregisterReceiver(myBroadCastReceiver)