web-dev-qa-db-ja.com

Kotlinを使用してメソッドで例外をスローします

私はこれを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を同じ方法で処理しないのですか?この状況に対処するための最善のアプローチは何ですか?

26
cesards

Kotlinでは、 チェックされた例外はありません 、例外を宣言する必要はなく、例外をキャッチする必要はありませんが、もちろんできます。 Javaクラスから派生する場合でも、メソッドthrowsの例外を宣言する必要はありません。

@Throws(SomeException::class) はJava相互運用性の単なる平均であり、Java署名にthrowsを使用して関数を記述することができるため、 Javaでは、例外を処理することができます(そして必要です)。

代わりに、パブリックAPIの例外は、 KDoc with @throwsタグ で文書化する必要があります。

60
hotkey

Javaでは、関数は次のようになります

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

しかし、Kotlinでは、以下のような注釈を追加する必要があります

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

ソース kotlinlang.org

11
Radesh