Броски Исключение в методе с Котлином

Я пытаюсь преобразовать этот код Java в Kotlin:

public class HeaderInterceptor implements Interceptor {
  @Override public Response intercept(Chain chain) throws IOException {
    return null;
  }
}

Проблема в том, что когда я реализую методы, я получаю что-то вроде

class JsonHeadersInterceptor : Interceptor {
    override fun intercept(chain: Interceptor.Chain?): Response? {
        throw UnsupportedOperationException()
    }
}

Единственная информация, которую я нашел, говоря о том, чтобы исключить исключения из Kotlin, - ЭТО.

Часть от удаления вопросительного знака, потому что это не обязательно, почему он не обрабатывает IOException таким же образом? Что лучше всего подходит для решения этой ситуации?

Ответ 1

В Kotlin нет проверенных исключений, никакие исключения не должны быть объявлены, и вы не будете вынуждены поймать какое-либо исключение, хотя, конечно, вы можете. Даже когда вы получаете из класса Java, вам не нужно объявлять исключения, что метод throws.

@Throws(SomeException::class) - это просто средство взаимодействия Java, оно позволяет писать функцию с throws в сигнатуре Java, так что в Java это будет возможно (и необходимо) для обработки исключения.

Вместо этого публичные исключения API должны быть задокументированы в KDoc с тегом @throws.

Ответ 2

В Java ваши функции примерно такие

void foo() throws IOException{
    throw new IOException();
}

Но в Kotlin вы должны добавить аннотацию, как показано ниже

@Throws(IOException::class)
fun foo() {
    throw IOException()
}

Источник kotlinlang.org