Say I want to do sth like
val foo = when(bar) {
"one" -> true
"two" -> false
else -> // in Swift it would be `fatalError()`
}
How do I do it?
I'm aware that there are generally better approaches to this kind of problem, but I want to know how to easily induce a crash in Kotlin too :)
You could throw an exception. This will bubble up the call stack until somebody handles it or you run out of stack frames and the application crashes.
val foo = when(bar) {
"one" -> true
"two" -> false
else -> throw IllegalArgumentException("$bar is Unknown")
}
I just used IllegalArgumentException
here, but you might want to define your own.
Throwing an exception (or, better still, an Error) is one way, but it may not shut down the current thread: any of the calling functions could catch the exception, or an UncaughtExceptionHandler could have been set for the Thread (or its ThreadGroup).
Nor will it shut down any other threads that may be running. (Even if you haven't started any yourself, they're used by coroutines, GUI toolkits, and other execution frameworks.)
To shut down the whole app, you should use the Kotlin exitProcess()
function, or in Kotlin/JVM the equivalent System.exit()
method. That will terminate all threads.
But even that will do a ‘graceful’ shutdown, running any shutdown hooks, finalizers, &c. If you need to forcibly kill a Kotlin/JVM app immediately, call Runtime.getRuntime().halt()
.
(And of course, it's probably good practice to first display something to stdout or the logging framework you're using, to indicate what the problem was.)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With