Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Android活动上使用Kotlin扩展函数正确执行空检查_Java_Android_Kotlin_Kotlin Android Extensions_Kotlin Null Safety - Fatal编程技术网

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

Java 如何在Android活动上使用Kotlin扩展函数正确执行空检查,java,android,kotlin,kotlin-android-extensions,kotlin-null-safety,Java,Android,Kotlin,Kotlin Android Extensions,Kotlin Null Safety,我是Kotlin的新手,尝试将现有代码库中的许多Android Util方法之一转换为Kotlin扩展函数 这是Kotlin代码: fun Activity?.isAlive(): Boolean { return !(this?.isFinishing ?: false) } 这意味着相当于此Java方法: public static boolean isAlive(Activity activity) { return activity != null &&

我是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();
}

然而,每当
活动
null
时,我仍然会在Kotlin代码中获得
NPE
。关于我哪里出错了,你有什么想法吗?

我想你不是在
isAlive()
函数中得到NPE,而是在
活动
被引用之后的某个地方得到NPE。这可能是由于
.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 

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

虽然接受的答案很好,但我建议改用相等检查,因为它会产生可读性更高的代码:

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

我正在使用this@ClassName?.isAlive()?.let onPostExecute中的{some alerdialog}仍然获得异常BadTokenException:无法添加窗口