Котлин непустое утверждение о нулевом

Поскольку у Котлина есть ненулевое утверждение, я нашел некоторые забавные вещи …

val myvar: String = null!! 

Он потерпит крах.

Но дело в том, что он не проверяет время компиляции.

Приложение будет аварийно завершено во время выполнения.

Должна ли она бросать ошибку времени компиляции?

!! оценивается во время выполнения, это просто оператор.

Выражение (x!!)

  • бросает KotlinNullPointerException если x == null ,
  • в противном случае он возвращает x приведённому к соответствующему непустому типу (например, он возвращает его как String при вызове переменной с типом String? ).

Это, конечно, делает null!! стенография для throw KotlinNullPointerException() .


Если это помогает, вы можете думать !! как делать то же самое, что и такая функция:

 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 } 

Так что делаю x!! даст вам тот же результат, что и x.toNonNullable() .

Intereting Posts