【问题标题】:Lazy initialized objects are always created总是创建延迟初始化的对象
【发布时间】:2019-07-15 15:45:21
【问题描述】:

在某些情况下,我的广播接收器不是必需的,因此需要检查接收器是否为空,但是即使不使用它并导致崩溃,该对象也不为空。

private val myBroadCastReceiver by lazy {
   MyBroadcastReceiver()
}
if(myBroadCastReceiver != null) unregisterReceiver(myBroadCastReceiver)

【问题讨论】:

    标签: android kotlin


    【解决方案1】:

    因为您将 myBroadcastReceiver 声明为 Lazy,这意味着您在调用 MyBroadcastReceiver() 之前不会使用它。您在 if 声明中执行的操作。

    所以如果你这样检查,它不会为空,因为你实际上在这里执行MyBroadcastReceiver() if(myBroadCastReceiver...)

    【讨论】:

      【解决方案2】:

      当您尝试空检查时,它已初始化,因此它不为空。试试这个而不是懒惰。

      private var myBroadCastReceiver : MyBroadcastReceiver? = null
      

      或试试这个答案 Kotlin: Check if lazy val has been initialised

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-10
      • 1970-01-01
      • 1970-01-01
      • 2011-11-17
      • 1970-01-01
      • 1970-01-01
      • 2020-10-08
      • 2017-11-11
      相关资源
      最近更新 更多