Kotlin 函数覆盖空检查

Kotlin function override null check

我尝试获取用户的 lastLocation 并实现了这样的方法。

getLocationClient()?.lastLocation?.addOnSuccessListener(object :
               OnSuccessListener<Location> {
           override fun onSuccess(loc: Location) {
               if (loc == null) return
              }
       })

但是,当我没有为 onSuccess 方法中的参数 Location 添加 null 安全性时,当 Location 参数为 null 时会导致一些崩溃。

当我如下图所示向参数添加 null 安全性时,它不会覆盖该方法。我能够使用空安全覆盖此方法,但我猜有些事情发生了变化。

我该如何解决这个问题?

OnSuccessListener 的类型参数也需要为空,即 OnSuccessListener<Location?> 而不是 OnSuccessListener<Location>

getLocationClient()?.lastLocation?.addOnSuccessListener(object :
               OnSuccessListener<Location?> {
           override fun onSuccess(loc: Location?) {
               if (loc == null) return
              }
       })

顺便说一句,您还可以使用 SAM 语法来以更短的方式完成同样的事情:

getLocationClient()?.lastLocation?.addOnSuccessListener { loc: Location? ->
    if (loc == null) return
}