为什么Kotlin中Boolean类型无法使用lateinit修饰符?
Kotlin中lateinit修饰Boolean报错的解决办法
报错信息翻译为:原始类型的属性不允许使用'lateinit'修饰符
Kotlin里的lateinit是专门给引用类型(比如String、自定义类)设计的延迟初始化修饰符,这类类型默认值为null,lateinit能让你跳过空安全检查,后续再完成初始化。但Boolean属于原始基本类型,本身有默认值(默认是false),所以Kotlin不允许给这类类型加lateinit。
给你两种可行的解决方式:
方式一:使用可空类型
把Boolean改成可空的Boolean?,默认值设为null,后续直接赋值即可,使用时注意处理空安全:
object BankAccount { lateinit var accountName: String lateinit var accountNumber: String var accountStatus: Boolean? = null } // 初始化操作 BankAccount.accountStatus = true
方式二:使用Delegates.notNull()委托
这个委托能实现类似lateinit的效果,确保属性在使用前完成初始化,未初始化就调用会抛出异常,适合原始类型:
import kotlin.properties.Delegates object BankAccount { lateinit var accountName: String lateinit var accountNumber: String var accountStatus: Boolean by Delegates.notNull() } // 初始化操作 BankAccount.accountStatus = false
内容的提问来源于stack exchange,提问作者user22210486
相关产品推荐
相关产品推荐

