我的旧Java版本方法如下所示:
@Override
public void closeSimpleAlertDialog() {
if (mAlertDialog != null && mAlertDialog.isShowing()) {
mAlertDialog.dismiss();
}
}
如您所知,检查空引用是否链接到对话框
mAlertDialog
,如果不为空,则检查调用方法isShowing()
,然后才导致关闭dismiss()
方法。很简单的我遇到了一个问题-如何仍然以“ Kotlin 风格”执行相同的操作?
我的第一个版本在这里:
if (mAlertDialog != null && mAlertDialog?.isShowing) {
mAlertDialog?.dismiss()
}
下一步将
mAlertDialog != null && mAlertDialog?.isShowing
更改为mAlertDialog?.isShowing ?: false
,最新版本如下:if (mAlertDialog?.isShowing ?: false)
mAlertDialog?.dismiss()
但是我不明白。为什么我需要“?”如果之前已经进行过null检查(此处:
mAlertDialog?.
)? 最佳答案
因为另一个线程可能在null检查之后和调用dismiss之前使该属性为null。如果使用局部变量或let
,则不会发生这种情况。
顺便说一句,如果您省略问号并徘徊在红色波浪状符号上,IntelliJ会告诉您
用Kotlin做到这一点的规范方法(AFAIK)是
fun close() {
mAlertDialog?.let {
if (it.isShowing) {
it.dismiss()
}
}
}