2017-05-22 3 views

Antwort

1

String? kann null sein und String kann nicht null sein, das ist alles, um es dort ist.

6

Wenn Sie ? verwenden, wird angezeigt, dass Sie auch einen Nullwert haben können. Weil Kotlin erzwingt null safety.

Siehe Anmerkungen in den folgenden Code:

data class Person(var name: String?) { // This can have null value also 
//... 
} 
data class Person(var name: String) { // This can not have a null value, it will give compile time error. 
//... 
} 
-3

Die ? für sichere Casting-Operator für Kotlin wäre. Für z. wenn wir einen Gussvorgang wie haben:

val x: String = y as String 

und wenn y ist null, dann wird der obige Code wird eine Ausnahme werfen. Um dies zu vermeiden, können wir den Safecast-Operator (?) verwenden. Die obige Snippet wird:

val x: String? = y as? String 

Diese null zurückkehren wird, wenn es irgendeine Art von Fehler ist während des Zauberwirkens. Hier finden Sie die Lesung link

+2

? ist kein sicherer Casting-Operator in Kotlin; der sichere Casting-Operator ist "wie?". Außerdem gibt es in diesem Beispiel keine Abgüsse; Das Beispiel deklariert eine Eigenschaft eines Nullable-Typs. – yole

1

Die "?" Der Operator definiert die Null-Fähigkeit einer Variablen.

Beispiele:

String Typ akzeptieren, aber auch Null-Wert übernehmen.

var x :String? = "" 
x = null // works fine 

Akzeptieren Sie nur den String-Typ, falls Sie den Wert auf null setzen möchten, wird ein Kompilierungsfehler ausgelöst.

var x :String = "" 
x = null // will provoke a compilation error. 

Es ist wichtig, im Auge zu behalten, nachdem Sie den Nullwert einer Variablen überprüfen wird es automatisch auf Nicht-Nullable-Typen umgewandelt werden.

fun test() { 

    var x: String? = "" 
    x = null // works fine 
    x = "String type" // works fine 

    if(x == null) { 
     println("The var x can't be null") 
     return 
    } 

    x = null // will provoke a compilation error. 
} 

fun main(args: Array<String>) { 

    test() 
} 

Kotlin Documentation, null-safety

+0

Dies ist etwas irreführend, bitte bearbeiten. Der '?' Operator ist nicht der Null-Sicherheitsoperator, es ist die Nulierbarkeit eines Typs. Außerdem verwenden Ihre Beispiele diesen Operator nicht, nachdem Sie "example:" gesagt haben ... schließlich ist der letzte Kommentar nicht immer wahr, besonders für eine Variable, es sei denn, es handelt sich um eine lokale Variable, die niemals von einem anderen Thread geändert werden könnte. –

+0

Ich habe meine Antwort bearbeitet und die von @JaysonMinard kommentierten Kommentare hinzugefügt. –

0

Eine Variable mit erklärt? zeigt an, dass die Variable null sein kann oder nicht.

Andernfalls wird es als ein Wert ungleich Null interpretiert.

Eine solche Funktion wurde Kotlin explizit hinzugefügt, um einen allgemeinen Laufzeitfehler zu reduzieren/zu verhindern, NullPointerException.

Für zB:

var a: String? = "abc" 
a.length  // Compile Time Error, trying to access possibly null value 

var b: String = "xyz" 
b.length  // No Error, the value is never null 

gesagt haben, dass Sie, dass ein Wert mit !! nicht null behaupten kann, ist, die den Compiler-Fehler entfernen, aber das Risiko eines NPE hinzu:

var a: String? = "abc" 
a!!.length  // Will cause Run Time Exception if a is null 
+0

Auch im obigen Beispiel ist das Ausführen einer a .length-Methode eine null-sichere Methode zum Überprüfen der Länge, bei der null zurückgegeben wird, wenn a null und die tatsächliche Länge if ist a ist nicht null. – Ryba

Verwandte Themen