Miensol के जवाब में जोड़ने के लिए : हालांकि कोटलिन में बहु-पकड़ अभी तक समर्थित नहीं है, लेकिन अधिक विकल्प हैं जिनका उल्लेख किया जाना चाहिए।
इसके अलावा 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ऐसा काम करेगा।
बेशक, आप अपने तर्क को अधिक सुरुचिपूर्ण ढंग से रचने के लिए या सादे पुराने ट्राइ-कैच की तुलना में अलग तरह से व्यवहार करने के लिए लंबोदर के बजाय वस्तुओं को चेन करना चाह सकते हैं।
यदि आप कुछ विशेषज्ञता जोड़ रहे हैं तो मैं केवल 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)