تعریف یک استثناء توسط کاربر

در کاتلین می‌توان یک استثناء سفارشی ایجاد کرد. استثناء سفارشی استثنایی است که توسط کاربر تعریف می‌شود و باید از کلاس پایه Exception ارث بری کند. برای این کار یک کلاس جداگانه که از کلاس پایه Exception ارث می‌برد ایجاد می‌کنیم. به کد زیر توجه کنید :

  1: class NegativeNumberException : Exception
  2: {
  3:     constructor() : super("The operation will result to a negative number.")
  4: }
  5: 
  6: fun main(args: Array<String>) 
  7: {
  8:     val firstNumber: Int
  9:     val secondNumber: Int
 10:     val difference: Int
 11: 
 12:     print("Enter the first number: ")
 13:     firstNumber = readLine()!!.toInt()
 14: 
 15:     print("Enter the second number: ")
 16:     secondNumber = readLine()!!.toInt()
 17: 
 18:     difference = firstNumber - secondNumber
 19: 
 20:     try 
 21:     {
 22:         if (difference < 0) 
 23:         {
 24:             throw NegativeNumberException()
 25:         }
 26:     } 
 27:     catch (error: NegativeNumberException) 
 28:     {
 29:         println(error.message)
 30:     }
 31: }
Enter the first number: 10
Enter the second number: 11
The operation will result to a negative number.

در خط 1 مشاهده می‌کنید کلاس ایجاد شده توسط ما از کلاس Exception ارث بری کرده است. به عنوان یک قرارداد باید به آخر نام کلاس‌های استثنایی که توسط کاربر تعریف می‌شوند کلمه Exception اضافه شده و سازنده کلاس والد را با استفاده از کلمه کلیدی super فراخوانی می‌کنیم و یک آرگومان از نوع رشته برای نمایش پیغام خطا، به آن ارسال می‌کنیم (خط 3).

حال می‌خواهیم یک کلاس استثناء خیلی سفارشی ایجاد کنیم. به خطوط 51-29 توجه کنید. چون که قرار است که از کاربر ورودی دریافت کنیم از متد ()readLine در خطوط 13 و 16 استفاده کرده‌ایم. از آنجاییکه تولید یک عدد منفی در هیچ برنامه‌ای یک استثناء محسوب نمی‌شود، ما به صورت دستی و برای خودمان یک استثناء ایجاد کرده‌ایم. ابتدا از کاربر می‌خواهیم که دو مقدار را وارد کند (خطوط 13 و 17). سپس تفاوت دو عدد را محاسبه می‌کنیم (خط 18). در داخل بلوک try تست می‌کنیم که آیا حاصل تفریق دو عدد، یک عدد منفی است (خط 25-22). اگر یک عدد منفی بود سپس یک استثناء به وسیله کلمه throw و کلاس NegativeNumberException ایجاد می‌کنیم (خط 24). بعد از ایجاد استثناء، به وسیله بلوک catch و برای نشان داده پیغام خطا، آن را اداره می‌کنیم (خطوط 30-27).