Kotlin kompilátor kontroluje, zda hodnota výrazu může být null
a pokud tomu tak je, kód nezkompiluje dokud se v daném místě neprovede kontrola na not null. Programátor si může vynutit, že chce danou hodnotu použít i bez této kontroly pokud si je jist, že hodnota není null pomocí dvou vykřičníků. Pokud hodnota je null, dojde k vyhození kotlin.KotlinNullPointerException
.
Nedoporučuje se používat více !!
(one celkově se !!
mají používat pouze vyjímečně ve zdůvodněných případech) na jednom řádku, protože výpis v logu vám neřekne, která hodnota byla null.
Příklad
class Aa (var b: Bb?) class Bb (var text: String?)
Výsledky volání
println(a!!.b!!.text!!.toUpperCase()) Exception in thread "main" kotlin.KotlinNullPointerException at cz.vitfo.NullKt.main(Null.kt:8) at cz.vitfo.NullKt.main(Null.kt)
println(aWithB!!.b!!.text!!.toUpperCase()) Exception in thread "main" kotlin.KotlinNullPointerException at cz.vitfo.NullKt.main(Null.kt:8) at cz.vitfo.NullKt.main(Null.kt)
Je vidět, že v logu je pouze řádek, kde došlo k vyhození výjimky, nikoliv přesně která část výrazu.