2017-06-26 6 views
1

In Java ein initialisieren kann eine Referenzvariable mit null initialisiert wird, zum Beispiel eines String-Variable wie so initialisiert werden kann:Wie eine Referenzvariable in Kotlin

String str = null; 

Aber in Kotlin, der Punkt zu vermeiden, ist mit Null so viel wie möglich. Wie kann ich also eine Eigenschaft initialisieren, ohne null

var str: String = ... 
+0

Verwenden Sie einen Wert ungleich 'String'? – Bubletan

+0

Sie können 'laterinit var' und' by lazy {...} 'verwenden, um eine Eigenschaft zu definieren, die erst später mit einem Nicht-Null-Wert initialisiert wird. Siehe: https://stackoverflow.com/questions/36623177/kotlin-property-initialization-using-by-lazy-vs-lateinit – hotkey

Antwort

5

Der Punkt in Kotlin tun kann, ist nicht zu Verwenden Sie niemals null (und NULL-fähige Typen), sondern verwenden Sie sie sicher mit geeigneten Sprachkonstrukten, anstatt sie zu befürchten. Während die Verwendung von nicht nullbaren Typen so gut wie möglich ist, müssen Sie sie nicht immer vermeiden, deshalb existieren die verschiedenen Handhabungskonstrukte (sichere Aufrufe, der Elvis-Operator usw.).

Wenn Sie die Erstellung Ihrer Variablen verzögern können, bis Sie etwas zuweisen können, ist das eine Lösung. Wenn das nicht möglich ist, dann ist es völlig in Ordnung, es zu markieren und null zuzuweisen, denn der Compiler wird Sie davor schützen, gefährliche Dinge damit zu tun.

0

können Sie

var str: String 

... 

str = "Some Awesome Value" 

tun, wenn Sie es wünschen NULLABLE Sie

var str: String? 
0

Als Option:

var str: String by Delegates.NotNull() 
0

Benutzer lateinit keywords.Need zu verwenden, und dann

private lateinit var str : String 
fun myInit(){ 
    str = "something"; 
} 

Hinweis initialisieren: dass die nicht initialisierten lateinit Eigenschaft führt zu einer UninitializedPropertyAccessException erreichbar.

lateinit unterstützt jedoch keine grundlegenden Datentypen wie Int.

Verwandte Themen