10

私は主に、チェックされた例外の潜在的な問題と、なぜKotlinがそれらを省略するのかを理解しています。しかし、私が遭遇している問題は、関数が投げる可能性のある例外を呼び出し側に明確に示すための確実な方法を見つけることができないということです。Kotlin関数がスローする例外を簡単に確認する方法はありますか?

Pythonで数え切れないほどの問題が発生しました。使用しているライブラリの関数が特定の例外を発生させる可能性があるため、数か月後にプログラムがクラッシュします。例外を捕捉することを余儀なくされることは非常に問題になることがありますが、関数が投げる可能性のあるすべての例外を明確に見ることはうれしいです。

質問に戻ると、関数がKotlinでスローする例外を調べる簡単な方法はありますか? Kotlinから呼び出されているJavaで書かれたメソッドはどうでしょうか?ツーリングだけでも(intelliJ)。使用している関数の作者が省略している可能性があるので、javadocまたはkdocでそれを書いていないと思います。

+0

私はそれが不可能だと思います。以下を考慮してください: 'val cls = Class.forName(a); valメソッド= cls.getMethod(b); method.invoke() '、ここで' a'と 'b'はファイルから読み込まれるか、ユーザ入力によって提供されます。コードを実行する前にこのコードがスローする例外を知るにはどうすればよいですか? –

+1

私はあなたがリフレクションを使用するときにあらゆる種類のタイプ情報が失われることを意味します。 Javaでリフレクションを使用していた場合、同じ問題は当てはまりませんか?コンパイル時に型が分かっている場合に例外がスローされる可能性があることを知ることは、まだ有用であると思います。 – zjuhasz

答えて

4

IntelliJからKotlinによって呼び出されたときにJavaメソッドがスローする例外を知りたい場合は、F1キーのショートカットを使用してjavadocをプルアップし、ポップアップメニューでスロー宣言を参照できます。

Kotlin関数は、@Throwsアノテーションを使用してスローする例外を宣言することができます。注釈は明らかにオプションです。したがって、これが常に存在するとは思わないでしょう。残念ながら、@Throwsを使用するメソッドでF1キーボードショートカットを使用すると、スローされると宣言された例外は表示されません。アノテーションで宣言されたこれらの例外をキャッチするには、これらのメソッドへのJava呼び出しが必要です。

Kotlin javadocは、@throws javadocアノテーションを使用して、関数内にスローされる定義例外をさらに提供することができます。これらはjavadocとF1ヘルプポップアップに表示されます。もちろんこれもオプションです。

+1

Javadocは私自身のコードにとって最適な解決策ですが、問題は多くのライブラリのjavadocが欲求不満であり、開発者がすべてのことを徹底的に文書化していることにあります。私はintelliJや手動で何かをチェックする必要がない別のツールの警告のようなものをもっと探していたので、間違いなくライブラリ関数からの例外を逃してしまうことはありません。このようなことはこれまで存在していないようです:/ – zjuhasz

+1

これはチェックされていない例外の仕組みのようなものです。あなたの痛みを知っています。 –

+1

F1キー? IntelliJのアクション名について書き直してください。ショートカットは再マッピングされる可能性があります。私のために働かない。 –

0

Resultと呼ばれるこのライブラリは素晴らしいソリューションです。値または例外を持つResultオブジェクトを返し、その型を成功または失敗に応じて変更します。また、ネストされたtry-catchブロックを排除するライブラリマップとフラットマップ関数を使用して連鎖させることもできます。非常にクールな、私はこの質問がそれをチェックアウトを見つける誰もお勧めします。

もちろん、これはそれを利用する関数でのみ役立ちますので、私は答えとしてマークしていません。

関連する問題