コトリンの異常を処理する
2064 ワード
コトリンの異常処理はJavaや他の言語の異常処理に似ている.
関数は正常に終了しますが、エラーが発生した場合は例外を放出できます.(throw)
関数呼び出し端子が処理(catch)で発生した異常を処理していない場合、関数呼び出しスタックを遡り、処理異常の部分が現れるまで再び異常を放出します.(rethrow)
Javaとは異なり、コトリンのthrowは式であり、他の式に含めることができる.
Javaと同様に、例外を処理する場合はtryとcatchとfinallyセクションを同時に使用できます.
つまり,おそらくJavaはチェック例外を明確に扱うべきである.
コトリンはやらなくてもいいです.
tryで使用
tryを使用して上記の例finallyセクションを削除し、コードを追加してファイルの読み取り数を出力します.
もし、もし
例外が発生した場合はNull値を使用します.
関数は正常に終了しますが、エラーが発生した場合は例外を放出できます.(throw)
関数呼び出し端子が処理(catch)で発生した異常を処理していない場合、関数呼び出しスタックを遡り、処理異常の部分が現れるまで再び異常を放出します.(rethrow)
if (percentage !in 0..100) {
throw IllegalArgumentException(
"A Percentage value must be between 0 and 100: $percentage")
}
他のクラスと同様に、例外インスタンスを作成する場合もnewを追加する必要はありません.(たとえば、Javaでnew Person()というオブジェクトを作成する必要はありませんが、クラスオブジェクトを宣言するように、コトリンでPerson()のみを宣言します)Javaとは異なり、コトリンのthrowは式であり、他の式に含めることができる.
val percentage =
if (number in 0..100)
number
else
throw IllegalArgumentException( // throw는 식이다.
"A percentage value must be between 0 and 100: $number")
try, catch, finallyJavaと同様に、例外を処理する場合はtryとcatchとfinallyセクションを同時に使用できます.
fun readNumber(reader: BufferedReader) : Int? { // 함수가 던질 수 있는 예외를 명시할 필요가 없다.
try{
val line = reader.readLine()
return Integer.parseInt(line)
}
catch (e: NumberFormatException) { // 예외 타입을 :의 오른쪽에 쓴다 (자바와 문법적 차이)
return null
}
finally { // finally는 자바와 똑같이 작동한다. (오류가 발생하든 안 발생하든 실행하라는 뜻)
reader.close()
}
}
-> val reader = BufferedReader(StringReader("239"))
-> println(readNumber(reader))
239
Javaコードとの最大の違いは、throwsセクションがコードに含まれていないことです.つまり,おそらくJavaはチェック例外を明確に扱うべきである.
コトリンはやらなくてもいいです.
tryで使用
tryを使用して上記の例finallyセクションを削除し、コードを追加してファイルの読み取り数を出力します.
fun readNumber(reader: BufferedReader) {
val number = try {
Integer.parseInt(reader.readLine()) // 이 식의 값이 try 식의 값이 된다.
} catch (e: NumberFormatException) {
return
}
println(number)
}
-> val reader = BufferedReader(StringReader("not a number"))
-> readNumber(reader) // 아무것도 출력되지 않는다.
上記の例ではcatchブロックでreturn文が使用されていますが、値は返されません.したがって、コンテンツは出力されません.もし、もし
} catch (e: NumberFormatException) {
null
}
もしあげるなら.例外が発生した場合はNull値を使用します.
Reference
この問題について(コトリンの異常を処理する), 我々は、より多くの情報をここで見つけました https://velog.io/@lsysysy/코틀린의-예외처리テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol