Есть ли простой способ увидеть, какие исключения выбрала функция Котлина?

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

Я столкнулся с проблемой бесчисленных раз в Python, где моя программа выйдет из строя после запуска в течение нескольких месяцев, потому что я не понимал, что функция из какой-либо библиотеки, которую я использую, может вызвать конкретное исключение. Хотя быть вынужденным перехватывать исключения может быть довольно проблематичным, хорошо видеть все возможные исключения, которые может бросить функция.

Итак, вернемся к вопросу, есть ли простой способ увидеть, какие исключения вызывает функция в Котлине? Как насчет методов, написанных на Java, которые вызывают из Котлина? Даже если только в инструментах (intelliJ). Я не рассчитываю записать его в javadoc или kdoc, поскольку автор используемой функции может опустить его.

Ответ 1

Если вы хотите узнать, какие исключения вызывает метод Java при вызове Kotlin из IntelliJ, вы можете использовать ярлык F1, чтобы вытащить javadoc и увидеть объявление throws во всплывающем меню.

Функции Kotlin могут объявлять исключения, которые он использует с помощью аннотации @Throws. Аннотации, очевидно, необязательны, поэтому вы, вероятно, не можете ожидать, что это всегда будет существовать. К сожалению, когда вы используете комбинацию клавиш F1 по методу, использующему @Throws, он не отображает объявленные исключения. Java-вызовы в эти методы необходимы для обнаружения этих исключений, объявленных в аннотации.

Kotlin javadoc может использовать аннотацию @throws javadoc для дальнейшего предоставления исключений определения, которые могут быть выбраны функцией. Они появляются в javadoc и во всплывающих подсказках F1. Конечно, это также необязательно.

Ответ 2

Эта библиотека, называемая Result, является хорошим решением. Он возвращает объект Result со значением или исключением и соответствующим образом изменяет свой тип на успех или неудачу. Их также можно связать вместе, используя карты и карты flatmap, которые помогают устранить вложенные блоки try-catch. Очень круто, я рекомендую всем, кто находит этот вопрос, проверить его.

Конечно, это помогает только функциям, которые используют его, поэтому я не отмечаю это как ответ.