首页 > 解决方案 > 如果初始化了其中的lateinit var,如何检查伴随对象的外部

问题描述

创建实例时如何检查user变量是否已初始化MyClass

class MyClass
{
    companion object
    {
        lateinit var user:User
    }

    init
    {
        //initialize if not initialized
        //user.isInitialized
        user = User
    }
}

我想要做的是仅在创建 MyClass 的第一个实例时初始化变量,并且该变量的相同值应该可以在所有实例中访问。如果无法像这样使用 isInitialzed,那么解决方法也是可以接受的.

标签: kotlininitializationkotlin-lateinit

解决方案


只需使用可为空的变量。


  1. 不安全的方法(不安全的方式与lateinit相同):
class MyClass {
    companion object {
        val user get() = user_ ?: throw UninitializedPropertyAccessException("property has not been initialized")
        private var user_: User? = null
    }

    init {
        if (user_ == null) user_ = User()
    }
}

现在您可以访问该属性:

MyClass.user.example()

  1. 安全方法:
class MyClass {
    companion object {
        var user: User? = null; private set
    }

    init {
        if (user == null) user = User()
    }
}

现在您可以安全地访问该属性:

MyClass.user?.example()

推荐阅读