如何在Android Activity上使用Kotlin扩展函数进行空检查

我是Kotlin的新手,并试图将我们现有代码库中的许多Android Util方法之一转换为Kotlin扩展函数。

这是Kotlin代码:

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

这意味着等同于这个Java方法:

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

但是,当Activitynull时,我仍然在Kotlin代码中获得NPEs 。 任何想法,我要去哪里错了?

我想你不会在isAlive()函数中获取NPE,但是在Activity被引用之后的某个地方。 这可能是由于.isAlive()null接收方返回true导致的。

那是因为如果接收者为nullthis?.isFinishing ?: false选择正确的分支为false ,因此!(this?.isFinishing ?: false)true

试试以任何一种方式改变你的函数,使它在null接收器上返回false ,例如:

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

我会建议写作

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

我发现单独的空检查和条件比组合版本更容易阅读。