如何在kotlin中使用elvis运算符时否定布尔表达式?
我想否定下面的表达式:
return SpUtils.loadEMail()?.isEmpty() ?: false
如果我添加一个! 之前的表情,像
return !SpUtils.loadEMail()?.isEmpty() ?: false
IDE(Android Studio)告诉我
在kotlin.Boolean类型的可为null的接收方中只允许使用安全(?)或非null断言(!!)调用?
我如何否定这种表情?
你有可空引用的问题。
SpUtils.loadEMail()?.isEmpty()
这段代码产生布尔类型的值? 这意味着表达式可以返回一个布尔实例或null 。
我建议下面的代码来解决你的问题:
return !(SpUtils().loadEMail()?.isEmpty() ?: false);
你试图否定布尔? 而不是布尔 , 猫王操作符返回!
?.
是一个安全的呼叫运营商 。
在这种情况下,它返回给你:
- 如果
loadEmail()
调用的结果不为null
,loadEmail()
布尔值 - 否则为
null
!
是一个内置的布尔操作,它调用package.Boolean
的运算符not()
,它只能用于不可空的引用。 ?.
的结果?.
是Boolean?
,所以你得到你的错误。
如果你想否定整个表达式,你可以坚持iRus的答案:
!(SpUtils().loadEMail()?.isEmpty() ?: false)
如果你只是否定了SpUtils().loadEMail()?.isEmpty()
部分,那么正确的变体将是:
!(SpUtils().loadEMail()?.isEmpty() ?: true)
如果结果是?.
将是空的(没有邮件),那么猫王操作员将返回你的true
(没有电子邮件),你会否定它。