82

我正在尝试将此 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一样处理呢?处理这种情况的最佳方法是什么?

4

2 回答 2

140

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

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

相反,公共 API 异常应该用标签记录在KDoc 中@throws

于 2016-04-10T10:54:23.510 回答
70

Java中,你的函数是这样的

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

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

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

来源kotlinlang.org

于 2019-01-23T12:15:43.457 回答