2017-06-27 2 views
2

Comme Kotlin ont l'affirmation non nulle, j'ai trouvé des trucs rigolos ...Kotlin affirmation non nulle sur null

val myvar: String = null!! 

Il se bloque.

Mais le fait est qu'il ne vérifie pas au moment de la compilation.

L'application va planter à l'exécution.

Ne devrait-il pas lancer une erreur de compilation?

+0

Et votre question est? – tyczj

+0

Ne devrait-il pas lancer une erreur de compilation? – RBK

+0

FYI: IntelliJ IDEA marque mark myvar: String = 'avec un avertissement:" Code inaccessible ". – mfulton26

Répondre

6

!! est évalué à l'exécution, c'est juste un opérateur.

L'expression (x!!)

  • jette un KotlinNullPointerException si x == null,
  • sinon, il renvoie x coulée du type non nulle (par exemple, on renvoie sous forme de String lorsqu'il est appelé correspondant à une variable avec le type String?).

Ceci, bien sûr, fait null!! raccourcis pour throw KotlinNullPointerException().


Si elle aide, vous pouvez penser à !! comme faire la même chose en fonction comme celui-ci fait:

fun <T> T?.toNonNullable() : T { 
    if(this == null) { 
     throw KotlinNullPointerException() 
    } 
    return this as T // this would actually get smart cast, but this 
        // explicit cast demonstrates the point better 
} 

faire Alors x!! vous donnerait le même résultat que x.toNonNullable().