相关疑难解决方法(0)

如何检查"lateinit"变量是否已初始化?

我想知道是否有办法检查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)

kotlin

322
推荐指数
7
解决办法
9万
查看次数

Kotlin懒惰的用法

我目前正在我的应用程序中使用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)

有没有办法完成同样的事情,没有额外的旗帜?

android realm kotlin

8
推荐指数
1
解决办法
1147
查看次数

总是创建惰性初始化的对象

在某些情况下,不需要我的广播接收器,因此需要检查接收器是否为空,但不知何故该对象不为空,即使不使用它并导致崩溃。

private val myBroadCastReceiver by lazy {
   MyBroadcastReceiver()
}
if(myBroadCastReceiver != null) unregisterReceiver(myBroadCastReceiver)
Run Code Online (Sandbox Code Playgroud)

android kotlin

3
推荐指数
1
解决办法
448
查看次数

标签 统计

kotlin ×3

android ×2

realm ×1