2015-12-17 7 views
37

Sto convertendo Java in Kotlin con Android Studio. Ottengo il doppio botto dopo la variabile di istanza. Qual è il doppio colpo e, soprattutto, dove è documentato?Cos'è l'operatore Kotlin double-bang (!!)?

mMap!!.addMarker(MarkerOptions().position(london).title("Marker in London")) 

risposta

70

Questo tipo nullable pericoloso (T?) conversione di un tipo non-nullable (T). Getterà NullPointerException se il valore è null.

È documentato here insieme a Kotlin mezzi di null-sicurezza.

+0

cosa significa quando il '' !! si trova alla fine di una dichiarazione? IJ auto-convert a Kotlin lo ha fatto per me "val price = sale.latest !!" – ycomp

+1

@ycomp, significa che 'sale.latest' può contenere' null'; l'assegnazione avrà esito positivo solo se 'sale.latest' non è nullo e altrimenti genererà NPE. Ciò fornisce la sicurezza nullo per 'val prezzo': il suo tipo sarà non nullo. Vedi https://kotlinlang.org/docs/reference/null-safety.html – hotkey

22

Ecco un esempio per rendere le cose più chiare. Diciamo che hanno questa funzione

fun main(args: Array<String>) { 
    var email: String; 
    email = null 
    println(email); 
} 

Questo produrrà il seguente errore di compilazione.

Null can not be a value of a non-null type String 

Ora è possibile impedire che con l'aggiunta di un punto di domanda per il tipo String per renderlo annullabile.

Così abbiamo

fun main(args: Array<String>) { 
    var email: String?; 
    email = null 
    println(email); 
} 

Questo produce un risultato di

null

Ora, se vogliamo che la funzione per generare un'eccezione quando il valore della posta elettronica è nullo, possiamo aggiungere due esclamazioni alla fine dell'e-mail. Ti piace questa

fun main(args: Array<String>) { 
    var email: String?; 
    email = null 
    println(email!!); 
} 

Questo lancerà una KotlinNullPointerException