Ich möchte den folgenden Ausdruck negieren:
return SpUtils.loadEMail()?.isEmpty() ?: false
Wenn ich ein! vor dem Ausdruck, wie
return !SpUtils.loadEMail()?.isEmpty() ?: false
Die IDE (Android Studio) sagt mir
Nur sichere (?.) oder nicht-null-bestätigte (!!.) Aufrufe sind auf einem nullbaren Empfänger vom Typ kotlin.Boolean?
erlaubt
Wie negiere ich diese Art von Ausdrücken?
Sie haben Probleme mit der Nullwert-Referenz.
%Vor%Dieser Code erzeugt einen Wert vom Typ Boolean? , der mit seinem Ausdruck eine Instanz von Boolean oder null zurückgeben kann.
Ich schlage folgenden Code vor, um Ihr Problem zu lösen:
%Vor%Sie versuchen negieren Boolean? anstelle von Boolean , das elvis operator kehrt zurück!
?.
ist ein sicherer Anrufoperator .
In diesem Fall gibt es Sie zurück:
loadEmail()
Aufruf nicht null
null
andernfalls !
ist eine eingebaute Boolesche Operation, die package.Boolean
aufruft. s-Operator namens not()
, der nur für Referenzen funktioniert, die nicht nullfähig sind. Das Ergebnis von ?.
ist Boolean?
, daher erhalten Sie Ihren Fehler.
Wenn Sie den gesamten Ausdruck negieren möchten, können Sie sich an die iRus-Antwort halten:
%Vor% Wenn Sie nur den SpUtils().loadEMail()?.isEmpty()
-Teil negieren möchten, lautet die korrekte Variante:
Wenn das Ergebnis von ?.
null ist (es gibt keine Mail), wird der elvis-Operator Ihnen true
(keine E-Mail) zurückgeben und Sie werden es negieren.
Tags und Links kotlin