2017-11-01 17 views
1

私はコトルを学び始めました。私は例外を処理する方法を理解できません。私はチェックされたものがないことを知っていますが、とにかく、私のメソッドがそれをスローするとどうしたらいいですか?例:Kotlinで例外を処理する方法は?

fun test(a: Int, b: Int) : Int { 
    return a/b 
} 

私が0で割ると、ArithmeticExceptionが発生します。だから私はそのようなことをどう扱うべきですか?

+0

'try-catch'は、Javaと同じように動作します。例外についてのドキュメント[here](https://kotlinlang.org/docs/reference/exceptions.html)でドキュメントを見ることができます。 – zsmb13

+0

@ zsmb13だから、私は "チェックされた"例外を処理することができる、ちょうどメソッドシグネチャのスローを書き込まないでください?そんなに書いても大丈夫ですか?もしそうなら、plsは答えとしてそれを書いて、私はこの質問を閉じるでしょう。 – VolodymyrH

答えて

1

ArithmeticExceptionは実行時の例外なので、Javaではチェックされません。それを処理するための選択肢はあまりにもJavaのと同じです:

  • はそれを無視して、ランタイム
  • でクラッシュを取得try-catchブロックでそれをラップします。あなたはそれが起こった場所からスタックのどこにでもキャッチして、あなたは何も宣言をthrowsする必要はありません。

何Kotlinに例外がチェックされますので、あなたは、そこにthrowsキーワードがないかではありませんが、あなたはKotlinとJavaを混合している場合、あなたはあなたのJavaコードでチェック例外の例外処理を強制したいですあなたのメソッドに@Throws注釈で注釈を付けることができます。

例外についての公式のKotlinドキュメントを参照してください。hereプラスとして

2

kotlinでのtry-catachは、あなたのコードは次のようになります値を返すことができるので:

fun test(a: Int, b: Int) : Int { 
    return try {a/b} catch(ex:Exception){ 0 /*Or any other default value*/ } 
} 
1

あなたは例外をencounting時にデフォルト値を返すために、拡張機能を書き込むことができます。

fun <T> tryOrDefault(defaultValue: T, f:() -> T): T { 
    return try { 
     f() 
    } catch (e: Exception) { 
     defaultValue 
    } 
} 

fun test(a: Int, b: Int) : Int = tryOrDefault(0) { 
    a/b 
} 
関連する問題