Cómo hacer comprobaciones nulas con las funciones de extensión de Kotlin en una actividad de Android

Soy nuevo en Kotlin e bash convertir uno de los muchos methods Android Util que tenemos en nuestra base de código existente en una function de extensión de Kotlin.

Este es el código de Kotlin:

fun Activity?.isAlive(): Boolean { return !(this?.isFinishing ?: false) } 

Que se supone que es el equivalente de este método de Java:

 public static boolean isAlive(Activity activity) { return activity != null && !activity.isFinishing(); } 

Sin embargo, sigo obteniendo NPEs en el código de Kotlin cuando una Activity es null . ¿Alguna idea de dónde me estoy equivocando?

Supongo que obtienes NPE no en la function isAlive() sino más isAlive() , cuando se hace reference a la Activity . Esto es probablemente causado por el hecho de que .isAlive() devuelve true en el receptor null .

Eso es porque si el receptor es null , this?.isFinishing ?: false elige la twig derecha como false , por lo tanto !(this?.isFinishing ?: false) es true .

Intente cambiar su function de cualquier manera para que devuelva false en el receptor null , por ejemplo:

 fun Activity?.isAlive(): Boolean = !(this?.isFinishing ?: true) 

Sugeriría escribir

 fun Activity?.isAlive(): Boolean = this != null && !this.isFinishing 

Encuentro que la verificación y la condición nula separadas son más fáciles de leer que las versiones combinadas.

  • ¿Hay alguna manera de crear una matriz no nula a partir de un range?
  • Kotlin null-check error
  • ¿Cómo definir un miembro delegado que se puede anotar en Kotlin?
  • Excepción del puntero nulo trabajando con Map (Kotlin)
  • Combine security nula y assertNotNull
  • Las comprobaciones nulas no se insertan para el tipo reificado cuando param no es nulo
  • ¿Kotlin no se puede anular valor puede ser nulo?
  • Manera idiomática de manejar lists anulables o vacías en Kotlin
  • ¿Cuándo debería usar let {} y cuando simplemente! = Null
  • function kotlin devuelve nulo
  • Cómo implementar lateinit correctamente con objects de class personalizados para usar en onCreate () en Android evitando el error 'Property getter or setter expected'