如何在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(); }
但是,当Activity
为null
时,我仍然在Kotlin代码中获得NPEs
。 任何想法,我要去哪里错了?
我想你不会在isAlive()
函数中获取NPE,但是在Activity
被引用之后的某个地方。 这可能是由于.isAlive()
在null
接收方返回true
导致的。
那是因为如果接收者为null
, this?.isFinishing ?: false
选择正确的分支为false
,因此!(this?.isFinishing ?: false)
为true
。
试试以任何一种方式改变你的函数,使它在null
接收器上返回false
,例如:
fun Activity?.isAlive(): Boolean = !(this?.isFinishing ?: true)
我会建议写作
fun Activity?.isAlive(): Boolean = this != null && !this.isFinishing
我发现单独的空检查和条件比组合版本更容易阅读。