在具有 Kotlin 的方法中引发异常

2022-08-31 11:48:06

我正在尝试将此 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 中抛出异常的信息是 THIS

除了删除问号,因为它不是必需的,为什么它不以相同的方式处理?处理这种情况的最佳方法是什么?IOException


答案 1

在 Kotlin 中,没有检查的异常,不需要声明任何异常,当然,你也不会被迫捕获任何异常。即使从 Java 类派生,也不必声明异常,即方法 .throws

@Throws(SomeException::class)仅用于Java互操作性,它允许使用Java签名编写函数,以便在Java中处理异常。throws

相反,公共 API 异常应记录在 KDoc 中,并带有@throws 标记


答案 2

Java中,你的函数是这样的

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

但是在 Kotlin 中,您可以添加如下所示的注释,以强制其他 Java 类捕获它。但是,正如其他答案所指出的那样,它在 Kotlin 类中没有任何意义。

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

kotlinlang.org


推荐