Задать вопрос
@zelan
Кратко обо мне не получится.

Как правильно и безболезненно отказаться от СHECKED EXCEPTION (переходе java->kotlin)?

Пишу и писал в основном на java, привык использовать проверяемые исключения. Привык что IDE заставляет меня обработать исключения если я забыл это сделать сам. При этом есть возможность обработать разный тип исключение по разному, и ide мне сама напоминает об их типах (объединяя иx и тп.).

Решил попробовать kotlin и тут на тебе... Оказывается там все исключения непроверяемые. Собственно для меня это дико.

1) Каким образом мне узнать что метод может что-то выбросить и что стоит обернуть код в try блок?

2) Каким образом обработать разный тип исключения по разному? Ведь тогда необходимо знать какое исключение (может даже несколько) выбрасывает метод, а в сигнатуре это не прописывается. Копаться в коде? Брррр...

3) Как проводить авто-рефакторинг? например, если работа метода изменилась и больше не выбрасывает одно из исключений - тогда будет оставаться мертвый код. Или хуже - добавилось новое исключение. Искать все места где используется метод и вводить новый catch?

4) Или может на всякий пожарный оборачивать все и везде (даже если метод ничего не выбрасывает)? Но это как-то неприятно и гадко.

Как поступить? Как то же пишут на C# и других языках с unchecked exceptions.
  • Вопрос задан
  • 669 просмотров
Подписаться 3 Средний 1 комментарий
Решения вопроса 1
zolt85
@zolt85
Программист
Пишите тесты.
Checked Esception как показывает практика, только мешают.
Если код не Ваш, а библиотечный, например, читайте документацию к API библиотеки.
В проекте, в котором я лично работаю, нет проблем с checked exception-ами. Если точно знаем, что метод на kotlin вызывается из Java кода и бросает при этом checked exception, то такой метод помечается аннотацией @Throws с указанием типа Exception-a. Если точно знаем что Java-код, вызываемый из Kotlin-кода бросает checked exception, и нам важно его поймать, то заворачиваем код в try\catch.
Вроде не сложно ...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы