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

Hen*_*que 2 java android kotlin kotlin-android-extensions kotlin-null-safety

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

这是Kotlin代码:

fun Activity?.isAlive(): Boolean {
    return !(this?.isFinishing ?: false)
}
Run Code Online (Sandbox Code Playgroud)

这意味着相当于这个Java方法:

public static boolean isAlive(Activity activity) {
    return activity != null && !activity.isFinishing();
}
Run Code Online (Sandbox Code Playgroud)

不过,我仍然获得NPEs在科特林代码每当Activitynull.关于我哪里出错的任何想法?

hot*_*key 6

我想你的NPE不是在isAlive()函数中,而是在Activity引用之后的某个地方.这可能是由以下事实导致.isAlive()返回truenull接收器.

这是因为如果接收器null,this?.isFinishing ?: false选择合适的分支false,从而!(this?.isFinishing ?: false)true.

尝试以任一方式更改您的功能,以便它falsenull接收器上返回,例如:

fun Activity?.isAlive(): Boolean = !(this?.isFinishing ?: true)
Run Code Online (Sandbox Code Playgroud)