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,则也可以使用变通方法。只需使用可为空的变量即可
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()