2017-04-10 3 views
1

Ich benutze Java-Bibliothek. In der Exception-Klasse gibt es das Feld "localizedMessage" und das Feld "description". Ich weiß nicht warum, aber "Beschreibung" (das ist Java String) wird als String erkannt! von Kotlin, und wenn "description" null ist, gibt die Bedingung Beschreibung == null false zurück. Beispiel Code:Kotlin null-check bug

mvpView?.showToast(it.description?:it.localizedMessage) 

oder ohne Elvis:

if (it.description.isNullOrBlank()) { 
    mvpView?.showToast(it.localizedMessage) 
} else { 
    mvpView?.showToast(it.description) 
} 

es immer versucht, "Beschreibung" zu zeigen, aber "Ausdruck auswerten" im Debug-Modus kehrt auf Beschreibung wahr == null (wie erwartet).

Kotlin Version ist 1.1.1

+2

Woher wissen Sie, dass es "Beschreibung" anstelle von "localizedMessage" zeigte? Vielleicht sind beide null. – glee8e

+1

'String!' Ist die Notation, die angibt, dass der String aus Java stammt und daher weiß Kotlin nicht, ob er nullfähig ist oder nicht. – pdpi

+0

@ glee8e vom Debugger –

Antwort

1

Der Grund in Getter war es eine andere Zeichenfolge zurückgegeben anstelle der Beschreibung, wenn Beschreibung null ist.

public String getDescription() { 
    if (description != null) { 
     return description; 
    } 
    if (UNKNOWN_ERROR.equals(getCode())) { 
     return String.format("Received error with code %s", getCode()); 
    } 
    return "Failed with unknown error"; 
} 
+0

Woher kommt diese Ausnahme? Die tatsächliche 'java.lang.Exception' hat keine Eigenschaft' description'. (Und Sie können Ihre eigenen Antworten akzeptieren.) –

+0

@EugenPechanec aus Third-Party-Bibliothek –