Что эквивалентно fatalError () Swift в Kotlin - PullRequest
0 голосов
/ 27 февраля 2019

Скажите, что я хочу сделать что-то вроде

val foo = when(bar) {
   "one" -> true
   "two" -> false
   else -> // in Swift it would be `fatalError()`
}

Как мне это сделать?

Я знаю, что обычно есть более подходящие подходы к решению этой проблемы, но я хочу знать, как легко вызвать сбой в Kotlin:)

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Бросок исключения (или, что еще лучше, Ошибка ) - это один из способов, но он не может завершить текущий поток: любая из вызывающих функций может перехватить исключение, или UncaughtExceptionHandler мог быть установлен для Thread (или его ThreadGroup ).

Также он не будет закрывать любые другие потоки, которые могут работать.(Даже если вы сами не запускали их, они используются сопрограммами, наборами графического интерфейса пользователя и другими средами исполнения.)

Чтобы завершить работу всего приложения, вы должны использовать Kotlin exitProcess() функция, или в Kotlin / JVM эквивалентный System.exit() метод.Это прервет все потоки.

Но даже это сделает «изящное» завершение работы, запустив все обработчики отключения, финализаторы и т. Д.Если вам нужно принудительно убить приложение Kotlin / JVM немедленно , позвоните Runtime.getRuntime().halt().

(И, конечно, рекомендуется сначала отобразить что-то длястандартный вывод или используемая среда ведения журнала, чтобы указать, в чем заключалась проблема.)

0 голосов
/ 27 февраля 2019

Вы можете выбросить исключение.Это будет пузыриться в стеке вызовов, пока кто-нибудь не обработает его, или вы не исчерпаете кадры стека, и приложение не выйдет из строя.

val foo = when(bar) {
   "one" -> true
   "two" -> false
   else -> throw IllegalArgumentException("$bar is Unknown")
}

Я просто использовал IllegalArgumentException здесь, но вы можете определить свой собственный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...