miensol 의 답변에 추가하려면 Kotlin의 멀티 캐치가 아직 지원되지 않지만 언급해야 할 대안이 더 있습니다.
이외에도 try-catch-when
멀티 캐치를 모방하는 방법을 구현할 수도 있습니다. 다음은 한 가지 옵션입니다.
fun (() -> Unit).catch(vararg exceptions: KClass<out Throwable>, catchBlock: (Throwable) -> Unit) {
try {
this()
} catch (e: Throwable) {
if (e::class in exceptions) catchBlock(e) else throw e
}
}
그리고 그것을 사용하면 다음과 같습니다.
fun main(args: Array<String>) {
{
println("Hello")
}.catch(IOException::class, IllegalAccessException::class) {
}
}
위와 같이 원시 람다를 사용하는 대신 함수를 사용하여 람다를 생성 할 수 있습니다 (그렇지 않으면 "MANY_LAMBDA_EXPRESSION_ARGUMENTS"및 기타 문제가 매우 빠르게 발생합니다). 같은 fun attempt(block: () -> Unit) = block
것이 작동합니다.
물론 논리를 더 우아하게 구성하거나 평범한 오래된 try-catch와 다르게 동작하기 위해 람다 대신 개체를 연결할 수 있습니다.
전문화를 추가하는 경우에만 miensol보다이 방법을 사용하는 것이 좋습니다 . 간단한 다중 캐치 사용의 경우 when
표현식이 가장 간단한 솔루션입니다.
pdvrieze
여기에 답장을 복사하고 있습니다 :This certainly works, but is slightly less efficient as the caught exception is explicit to the jvm (so a non-processed exception will not be caught and rethrown which would be the corollary of your solution)