Caused by: kotlin.UninitializedPropertyAccessException: lateinit property rv has not been initialize

kotlin.UninitializedPropertyAccessException 是 Kotlin 中的一个异常,它通常发生在你尝试访问一个尚未初始化的延迟属性(lateinit 修饰的属性)时。在 Kotlin 中,lateinit 是一个修饰符,它允许你在声明时延迟非空属性的初始化,直到在类的构造函数或其他初始化代码块中实际设置它。

当你尝试读取一个 lateinit 属性但在其被赋值之前就访问它时,Kotlin 运行时将抛出 kotlin.UninitializedPropertyAccessException

例如:

class MyClass {  
    lateinit var myProperty: String  
  
    fun doSomething() {  
        // 如果没有在其他地方先初始化 myProperty,这里将抛出 UninitializedPropertyAccessException  
        println(myProperty)  
    }  
}  
  
fun main() {  
    val myClass = MyClass()  
    myClass.doSomething() // 这里将抛出异常,因为 myProperty 还没有被初始化  
}
为了解决这个问题,你需要确保在访问 lateinit 属性之前对其进行初始化。这通常是在构造函数中或者在调用 doSomething() 方法之前的其他初始化代码块中完成的。

正确的使用方式可能如下所示:

class MyClass {
lateinit var myProperty: String
init {
myProperty = "Initialized value" // 在 init 块中初始化
}
fun doSomething() {
println(myProperty) // 现在可以安全地访问 myProperty,因为它已经被初始化了
}
}
fun main() {
val myClass = MyClass()
myClass.doSomething() // 正常工作,没有异常
}

或者,如果你不想使用 lateinit,你也可以简单地声明一个可空类型的属性,并在需要时检查它是否为空

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值