Kotlin 如果伴生对象内部的lateinit变量已初始化,如何在伴生对象外部进行检查

Kotlin 如果伴生对象内部的lateinit变量已初始化,如何在伴生对象外部进行检查,kotlin,initialization,kotlin-lateinit,Kotlin,Initialization,Kotlin Lateinit,创建MyClass实例时,如何检查user变量是否已初始化 class MyClass { companion object { lateinit var user:User } init { //initialize if not initialized //user.isInitialized user = User } } 我要做的是仅在创建MyClass的第一个实例时初始化

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

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

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

我要做的是仅在创建MyClass的第一个实例时初始化该变量,并且该变量的相同值应可在所有实例中访问。如果不能像这样使用IsInitialized,则也可以使用变通方法。

只需使用可为空的变量即可


  • 不安全方法(不安全方式与lateinit相同):
  • 现在,您可以访问该属性:

    MyClass.user.example()
    

  • 安全进近:
  • 现在,您可以安全地访问该属性:

    MyClass.user?.example()
    

    答案是这样的。  — 但是,在这种情况下,另一种方法是删除
    lateinit
    ,而是通过lazy{user}声明它
    val user:user。  这更短、更清晰、不可变,并避免了任何线程问题。@gidds user.isInitialized在init{}中使用时会出错。我找到了一种检查初始化状态的简单方法。语法为
    ::user.isInitialized
    ,带有
    (类似于函数引用
    class MyClass {
        companion object {
            var user: User? = null; private set
        }
    
        init {
            if (user == null) user = User()
        }
    }
    
    MyClass.user?.example()