Основы Kotlin, часть 2. Бросание исключений


ПОЧЕМУ

Что мы знаем об исключениях?

Я знал только об исключениях, которые нужно создавать на случай, если вы бросите запрос к API, а он не сработает.

Единственное, что я знал об исключениях, это


Что такое исключение?

https://www.udemy.com/course/kotlinmasterclass/learn/lecture/16673664#overview

Я изучил его в мастер-классе по Kotlin на Udemy.

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

Трассировка стека, которая дает информацию о том, какая функция выполнялась до Исключения.


Исключение, которое обычно происходит

    print("text".toInt())

java.lang.NumberFormatException: For input string: "text"
Войдите в полноэкранный режим Выход из полноэкранного режима

NumberFormatException выбрасывается, если String установлен в Int.

at com.example.springboot.PersonHandler.getPersons(Resource.kt:18) 
Войдите в полноэкранный режим Выход из полноэкранного режима

В то же время появляется Stacktrace.
Здесь у нас есть информация о том, что ошибка произошла в getPersons в PersonHandler (строка 18 в Resource.kt).


Try/catch для подавления исключения и продолжения работы приложения только с простым сообщением об ошибке.

    try {
      print("text"?.toInt())
    } catch (e: Exception) {
      println("Exception Occurred!")
      println(e.localizedMessage)
    }
Войдите в полноэкранный режим Выход из полноэкранного режима

Поместите код, который вызывает NumberFormatException, внутрь try.
Если возникает исключение, то выдается локализованное сообщение об этом исключении.

Exception Occurred!
For input string: "text"
Войдите в полноэкранный режим Выход из полноэкранного режима

Если это localisedMessage, появится минимальное сообщение об ошибке.
Кроме того, приложение обычно завершается при возникновении исключения.
Однако на этот раз Exception перехватывается командой try.
Таким образом, приложение не завершается и может быть выполнена следующая строка.


Ловля исключения с одновременным созданием подробной трассировки стека

catch (e: Exception) {
      println("Exception Occurred!")
      e.printStackTrace()
      println(e.localizedMessage)
    }
Войдите в полноэкранный режим Выход из полноэкранного режима

Если e.printStackTrace включен в catch
При удержании кнопки Exception можно также сгенерировать подробную трассировку стека.

Снова появится знакомый красный текст ошибки.

Если после этого вы напишете finally, он будет работать в любом случае, даже если try сработает или произойдет Error. Вы пишете процесс инициализации или что-то другое?


Заставьте его выбрасывать исключение в случае возникновения ситуации или отсутствия аргумента.

Вы можете бросить оригинальное сообщение об исключении.

    throw IllegalStateException("なんかちがう")
Войдите в полноэкранный режим Выход из полноэкранного режима
java.lang.IllegalStateException: なんかちがう
Войдите в полноэкранный режим Выход из полноэкранного режима

IllegalStateExceptionとは?Java初心者の勉強

IllegalStateException — это исключение, которое следует бросать в неподходящих ситуациях.

https://kotlinlang.org/docs/exceptions.html#the-nothing-type

    val name = null
    name ?: throw IllegalArgumentException("Name required")
Войдите в полноэкранный режим Выход из полноэкранного режима
java.lang.IllegalArgumentException: Name required
Войдите в полноэкранный режим Выход из полноэкранного режима

IllegalArgumentException — это исключение, возникающее при неправильном аргументе.

Выбросьте исключение с подходящим для данной ситуации именем!


Бросайте оригинальные исключения в зависимости от условий

Runtime Exception может быть расширен для создания пользовательских ошибок, таких как HogeIdNotFoundException. Требуется верификация.

Бросайте HogeIdNotFoundException(), если HogeId отсутствует.


Резюме.

Когда строка преобразуется в Int или происходит что-то неожиданное
Kotlin выбрасывает исключение, и приложение завершается.

Однако, если вы напишете строку, в которой происходит что-то неожиданное, внутри попытки и поймаете ее в
Если написать неожиданную строку внутри try и перехватить ее в catch, можно продолжить работу без завершения приложения.

С другой стороны, процесс не происходит, когда вы его ловите. Если возникают несоответствия данных, вы можете вывести стектрейс в catch, чтобы потом проверить его в журналах!

Кроме того, если вы выбросите IllegalStateException или IllegalArgumentException в зависимости от условий в UseCase, вы можете завершить приложение до того, как произойдет что-то плохое.

Более того, Runtime Exception может быть расширен, поэтому вам будет проще следить за журналом ошибок, если вы создадите свой собственный оригинальный Exception.

Оцените статью
devanswers.ru
Добавить комментарий