Для чего нужен оператор !!

Ответ

Оператор !! в Kotlin используется для принудительного приведения nullable-типа к non-null типу. Он выбрасывает NullPointerException, если значение равно null.

Пример:

val nullableString: String? = "Hello"
val nonNullString: String = nullableString!! // Работает
println(nonNullString.length)

val nullString: String? = null
val crash: String = nullString!! // Выбросит NPE

Использовать !! стоит только когда ты абсолютно уверен, что значение не может быть null. В остальных случаях лучше использовать безопасные вызовы (?.) или let с ?.

Ответ 18+ 🔞

А, ну это же классика, ёпта! Смотри, есть в Котлине такая штука — два восклицательных знака подряд, !!. По-простому это называется "оператор "на, блядь, получи!". Суть простая: ты берешь переменную, которая может быть пустой (nullable), и говоришь языку: "Да похуй, чувак, я уверен, тут не null, делай как я сказал!".

Вот смотри, как это выглядит в деле:

val nullableString: String? = "Hello"
val nonNullString: String = nullableString!! // Всё чики-пуки, работает
println(nonNullString.length)

Тут всё ок, потому что в строке реально есть текст. Но вся соль в том, что если твоя уверенность — это пиздёж собачий, и там на самом деле null, то тебе прилетит NullPointerException прямо в лоб. Ядрёна вошь!

val nullString: String? = null
val crash: String = nullString!! // Ёб твою мать! Вылетает NPE нахуй!

Вот и весь цирк. Использовать эту поебень нужно только в одном случае: когда ты на 146% уверен, что значение не может быть нулевым. Типа, только что сам его там проинициализировал и никуда не отпускал. Во всех остальных ситуациях — это признак говнокода и кривых рук. Настоящие пацаны используют безопасные вызовы (?.), let с ? или Elvis-оператор (?:). А !! — это как пойти по тонкому льду с криком "Да я уверен, он выдержит!". Может, и выдержит. А может, и хуй с горы — пизда рулю.