Как правильно выполнять нулевые проверки с использованием функций расширения Kotlin в действии Android

Я новичок в Kotlin и пытаюсь преобразовать один из многих методов Android Util, которые у нас есть в нашей существующей кодовой базе, в функцию расширения Kotlin.

Это код Котлина:

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

Что должно быть эквивалентно этому Java-методу:

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

Тем не менее, я все еще получаю NPEs в коде Kotlin всякий раз, когда Activity имеет значение null . Любые мысли о том, где я ошибаюсь?

Я полагаю, что вы получаете NPE не в функции isAlive() а где-то после, когда ссылка на Activity . Вероятно, это связано с тем, что .isAlive() возвращает true на null приемнике.

Это потому, что если получатель имеет значение null , this?.isFinishing ?: false выбирает правильную ветвь false , таким образом !(this?.isFinishing ?: false) true .

Попытайтесь изменить свою функцию в любом случае, чтобы она возвращала значение false для null приемника, например:

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

Я бы предложил написать

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

Я считаю, что отдельная нулевая проверка и условие легче читать, чем объединенные версии.

  • как использовать весенние аннотации, такие как @Autowired или @Value в kotlin для примитивных типов?
  • Как идиоматически проверить непустые, непустые строки в Котлин?
  • Ошибка проверки Котлина
  • null в listOf (), а не null в listOf (значение) в Kotlin в одном лайнере?
  • обрабатывать объект, который может возвращать значение null в kotlin
  • Kotlin - lateinit VS Any? = null
  • Как правильно реализовать lateinit с пользовательскими объектами класса для использования в onCreate () в android, избегая ошибки Property getter или setter expected
  • Котлин с, если не нуль
  • Как запустить код, если объект имеет значение null?
  • Kotlin 'небезопасный вызов ошибки компиляции с помощью NULL-приемника после нулевой проверки
  • Смутно о Null Safety в Котлине
  • Interesting Posts

    Котлин дважды проверяет нуль, если еще

    Как получить родительский класс внутри анонимного класса в kotlin

    Fade excludeTarget не работает внутри DrawerLayout

    Ошибка: выполнение выполнено для задачи ': app: clean'. Не удалось удалить файл

    свойство lateinit не инициализируется при восстановлении активности

    Включить ведение журнала в операторе Элвиса?

    Котлин: заявление Лямбде

    Могу ли я добавить возврат, когда я использую операцию Элвиса в Котлине?

    Смарт-литье и сравнение внутри Когда выражение после «есть» проверка типа

    Почему .map в mutableList фактически не изменяет значения внутри List в Kotlin?

    Получение абсолютного пути к файлу из содержимого URI для найденных изображений

    Равный оператор не может применяться между примитивной и коробчатой ​​переменной

    Параметр эффективный конфликт видимости между java и kotlin

    Как переопределить метод открытого класса Java в Котлине?

    не может компилировать приложение tornadofx в автономную банку

    Давайте будем гением компьютера.