Miensol'ün cevabına eklemek için: Kotlin'de çoklu yakalama henüz desteklenmese de, belirtilmesi gereken daha fazla alternatif var.
Bunun yanı sıra, try-catch-when
çoklu yakalamayı taklit etmek için bir yöntem de uygulayabilirsiniz. İşte bir seçenek:
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
}
}
Ve bunu kullanmak şöyle görünür:
fun main(args: Array<String>) {
{
println("Hello")
}.catch(IOException::class, IllegalAccessException::class) {
}
}
Yukarıda gösterildiği gibi ham bir lambda kullanmak yerine bir lambda üretmek için bir işlev kullanmak isteyeceksiniz (aksi takdirde "MANY_LAMBDA_EXPRESSION_ARGUMENTS" ve diğer sorunlarla oldukça hızlı bir şekilde karşılaşacaksınız). fun attempt(block: () -> Unit) = block
İşe yarayacak gibi bir şey .
Elbette, mantığınızı daha zarif bir şekilde oluşturmak için lambdalar yerine nesneleri zincirlemek veya düz eski bir deneme yakalamadan farklı davranmak isteyebilirsiniz.
Bu yaklaşımı miensollere göre sadece biraz uzmanlık ekliyorsanız kullanmanızı tavsiye ederim . Basit çoklu yakalama kullanımları için bir when
ifade en basit çözümdür.
pdvrieze
burada cevap: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)