try-catch
- это выражение на языке котлин. Если блок try
работает успешно, ничего не выбрасывая, возвращается его последнее значение. Если возникает исключение, возвращается последнее значение блока catch
.
В вашем случае, если String.format
не выбрасывает исключение, его результат возвращается с первого try-catch
, и вы в порядке. Это легкий маршрут.
Если String.format
выдает исключение, возвращается последнее выражение блока catch
, которое является вторым вложенным try-finally
. Это может закончиться двумя способами:
- Если вложенный блок
try
выполняется успешно, его последнее выражение (в данном случае incrementErrorCount
) - это то, что он вычисляет, и тогда результат этого вызова будет присвоен someString
. Это ошибка типа, которую вы получаете, похоже, incrementErrorCount
не возвращает String
для назначения.
- Если во вложенном
try
произойдет сбой, вы выдаете исключение, отменяя назначение someString
в целом.
Добавление строки [2] исправляет вашу ошибку, потому что вложенное try-catch
не используется в качестве значения для присваивания someString
, оно просто выполняется, а выражение throw
отменяет все присвоение someString
.