Есть ли простой способ увидеть, какие исключения выдает функция Kotlin?
Я в основном понимаю потенциальные проблемы с проверенными исключениями и почему Kotlin пропускает их. Тем не менее, проблема, с которой я сталкиваюсь, заключается в том, что я не могу найти надежного способа четко указать вызывающей стороне, какие исключения может выдавать функция.
Я сталкивался с проблемой бесчисленное количество раз в Python, где моя программа зависала после нескольких месяцев работы, потому что я не понимал, что функция из какой-то библиотеки, которую я использую, может вызвать конкретное исключение. Хотя быть вынужденным отлавливать исключения может быть довольно проблематичным, приятно четко видеть все потенциальные исключения, которые может генерировать функция.
Итак, вернемся к вопросу, есть ли простой способ узнать, какие исключения выдает функция в Kotlin? Как насчет методов, написанных на Java, которые вызываются из Kotlin? Даже если только в инструментах (intelliJ). Я не рассчитываю написать это в javadoc или kdoc, так как автор функции, которую вы используете, возможно, пропустил это.
2 ответа
Если вы хотите узнать, какие исключения выдает метод Java при вызове Kotlin из IntelliJ, вы можете использовать комбинацию клавиш F1, чтобы вызвать javadoc и увидеть объявление throws во всплывающем меню.
Функции Kotlin могут объявлять исключения, которые он выдает, используя аннотацию @Throws. Аннотации, очевидно, не являются обязательными, поэтому вы не можете ожидать, что это будет существовать всегда. К сожалению, когда вы используете сочетание клавиш F1 в методе, использующем @Throws, он не показывает исключения, объявленные как выброшенные. Вызовы Java в эти методы необходимы для перехвата этих исключений, объявленных в аннотации.
Kotlin javadoc может использовать аннотацию @throws javadoc для дальнейшего предоставления исключений определений, которые могут быть добавлены в функцию. Они появляются в javadoc и во всплывающих окнах справки F1. Конечно, это также необязательно.
Эта библиотека под названием Result является хорошим решением. Он возвращает объект Result со значением или исключением и соответственно изменяет его тип на успешный или неудачный. Их также можно объединить в цепочку, используя функции библиотеки библиотек и функции плоской карты, что помогает исключить вложенные блоки try-catch. Очень круто, я рекомендую всем, кто найдет этот вопрос, проверить его.
Конечно, это помогает только функциям, которые его используют, поэтому я не отмечаю это как ответ.