kotlin inverse boolean safe casting

kotlin inverse boolean safe casting

假设我有一个对象 Response。现在我想检查一个布尔变量,成功,在 Response 下并尽早 return is response is not successful。

if(response == null || !response.success){
   return;
} //Java version

现在我想像下面这样使用 Kotlin 的 null 安全检查

if(response?.success ?: true){
    return
}

如果我没记错的话,如果 response 或 success 为 null,我们将 return 在 if 条件下为真。但是,如果 response.success 不为 null 且等于 true,我们仍然会从函数中 return ,这不是我想要的。我该如何纠正这种情况?

我认为你必须做

if(!(response?.success ?: false)){
    return // null or failed
}

相当于您的 java 版本。

但注意:如果null检查版本更容易阅读。您也可以在 Kotlin 中使用它

你也可以翻转条件

response?.success?.let {
  // do something when success
}

see the Elvis operator doc for more info

很老的问题,但我只是偶然发现了它。 以下可能是最短的if子句:

if (response?.success != true) {
   //There is either no response, or it was not successful
}