Consider the following code:
Example
fun main(args: Array) {
maybeWriteMessage()
}
fun maybeWriteMessage(message:
In the following code:
fun maybeWriteMessage(message: String? = null) {
writeMessage(message!!)
}
you're asserting that the nullable parameter message
is not null by using !!
(the not-null assertion operator). If message
is null though, this will throw a null pointer.
TL;DR: Do not use !!
unless you exactly know what you're doing. There's almost always a better way.
The !! Operator
The third option is for NPE-lovers: the not-null assertion operator (!!) converts any value to a non-null type and throws an exception if the value is null. We can write b!!, and this will return a non-null value of b (e.g., a String in our example) or throw an NPE if b is null:
val l = b!!.length
Thus, if you want an NPE, you can have it, but you have to ask for it explicitly, and it does not appear out of the blue.