Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Android

Kotlin में कस्टम एक्सेप्शन कैसे थ्रो करें?

परिचय

Kotlin में सभी एक्सेप्शन `Throwable` क्लास से विरासत में मिले हैं। कस्टम एक्सेप्शन अनचेक्ड एक्सेप्शन होते हैं (रनटाइम पर फेंके जाते हैं)। यह लेख कस्टम एक्सेप्शन बनाने और उपयोग करने का तरीका दिखाता है।

चेक्ड बनाम अनचेक्ड एक्सेप्शन

प्रकारविवरणउदाहरण
चेक्डकंपाइल टाइम पर चेक किए जाते हैंIOException, FileNotFoundException
अनचेक्डरनटाइम पर फेंके जाते हैंArithmeticException, NumberFormatException, कस्टम एक्सेप्शन

उदाहरण 1: चेक्ड एक्सेप्शन (IOException)

import java.io.File
import java.io.InputStream

fun main() {
    try {
        val inputStream: InputStream = File("nonexistent.txt").inputStream()
    } catch (e: Exception) {
        e.printStackTrace()
    }
}

उदाहरण 2: अनचेक्ड एक्सेप्शन (NumberFormatException)

fun main() {
    try {
        val str = "Tutorialspoint.com"
        val number = str.toInt()  // NumberFormatException फेंकेगा
    } catch (e: Exception) {
        e.printStackTrace()
    } finally {
        println("एक्सेप्शन हैंडलिंग पूर्ण")
    }
}

कस्टम एक्सेप्शन बनाना

कस्टम एक्सेप्शन क्लास `Exception` (या उपवर्ग) से विस्तारित होती है।

बुनियादी कस्टम एक्सेप्शन:

// कस्टम एक्सेप्शन क्लास
class MyCustomException(message: String) : Exception(message)

// अतिरिक्त डेटा के साथ
class ValidationException(
    message: String,
    val fieldName: String,
    val invalidValue: Any
) : Exception(message) {
    override fun toString(): String = "$message (फील्ड: $fieldName, मान: $invalidValue)"
}

// एकाधिक कंस्ट्रक्टर
class AppException(
    message: String,
    cause: Throwable? = null,
    val errorCode: Int = 500
) : Exception(message, cause)

कस्टम एक्सेप्शन थ्रो करना और पकड़ना

fun validateAge(age: Int) {
    if (age < 0) {
        throw MyCustomException("आयु ऋणात्मक नहीं हो सकती: $age")
    }
    if (age > 150) {
        throw ValidationException("आयु अवास्तविक है", "age", age)
    }
    println("मान्य आयु: $age")
}

fun processUserInput(input: String) {
    try {
        val age = input.toInt()
        validateAge(age)
    } catch (e: ValidationException) {
        println("मान्यकरण त्रुटि: ${e.message}")
        println("फील्ड: ${e.fieldName}, मान: ${e.invalidValue}")
    } catch (e: NumberFormatException) {
        println("अमान्य संख्या प्रारूप: $input")
    } catch (e: MyCustomException) {
        println("कस्टम त्रुटि: ${e.message}")
    } catch (e: Exception) {
        println("अन्य त्रुटि: ${e.message}")
    }
}

fun main() {
    processUserInput("25")      // मान्य
    processUserInput("-5")      // कस्टम एक्सेप्शन
    processUserInput("200")     // ValidationException
    processUserInput("abc")     // NumberFormatException
}

आउटपुट

मान्य आयु: 25
कस्टम त्रुटि: आयु ऋणात्मक नहीं हो सकती: -5
मान्यकरण त्रुटि: आयु अवास्तविक है (फील्ड: age, मान: 200)
अमान्य संख्या प्रारूप: abc

उन्नत: सील्ड क्लासेस के साथ एक्सेप्शन हायरार्की (Kotlin 1.5+)

sealed class AppError(val message: String) : Exception(message) {
    data class NetworkError(override val message: String, val statusCode: Int) : AppError(message)
    data class ValidationError(override val message: String, val errors: Map) : AppError(message)
    data class AuthError(override val message: String) : AppError(message)
    object UnknownError : AppError("अज्ञात त्रुटि")
}

fun handleError(error: AppError) = when (error) {
    is AppError.NetworkError -> println("नेटवर्क त्रुटि: ${error.statusCode}")
    is AppError.ValidationError -> println("मान्यकरण: ${error.errors}")
    is AppError.AuthError -> println("प्रमाणीकरण त्रुटि")
    AppError.UnknownError -> println("अज्ञात")
}

fun main() {
    handleError(AppError.NetworkError("टाइमआउट", 408))
    handleError(AppError.ValidationError("अमान्य", mapOf("email" to "अमान्य प्रारूप")))
}

सर्वोत्तम अभ्यास

  • कस्टम एक्सेप्शन के लिए सार्थक नाम दें (`UserNotFoundException` नहीं `MyException`)
  • डेटा क्लास का उपयोग करें जब एक्सेप्शन में संरचित डेटा हो
  • कारण (`cause`) पैरामीटर शामिल करें चेनिंग के लिए
  • सील्ड क्लासेस का उपयोग करें एक्सेप्शन हायरार्की के लिए (थकाऊ when कवरेज)
  • कंट्रोल फ्लो के लिए एक्सेप्शन का उपयोग न करें - केवल असाधारण स्थितियों के लिए
  1. - Java में कस्टम अपवाद (Custom Exception) कैसे बनाएं?

    कभी-कभी एप्लिकेशन की आवश्यकताओं के आधार पर सार्थक अपवाद विकसित करना आवश्यक होता है। Java में हम Exception क्लास को एक्सटेंड करके अपने खुद के अपवाद (Custom Exceptions) बना सकते हैं। उपयोगकर्ता-परिभाषित अपवादों को Java में कस्टम अपवाद (Custom Exceptions) के नाम से भी जाना जाता है। कस्टम अपवाद बनाने

  1. - पायथन में मैन्युअली एक्सेप्शन कैसे थ्रो/उठाएं?

    हम अपने विशिष्ट मुद्दे को फिट करने वाले सबसे विशिष्ट एक्सेप्शन कंस्ट्रक्टर का उपयोग करते हैं बजाय जेनेरिक एक्सेप्शन उठाने के। हमारे विशिष्ट एक्सेप्शन को पकड़ने के लिए, हमें उन सभी अन्य अधिक विशिष्ट एक्सेप्शन को पकड़ना होगा जो इसे सबक्लास करते हैं। हमें विशिष्ट एक्सेप्शन उठाने और उन्हीं विशिष्ट एक्से

  1. Ruby में कस्टम अपवाद में महारत हासिल करें: एक चरण-दर-चरण गाइड Ruby में कस्टम अपवाद में महारत हासिल करें: एक चरण-दर-चरण गाइड

    Ruby में अपने स्वयं के अपवाद बनाना आसान है। बस इन चरणों का पालन करें: 1. एक नई क्लास बनाएं अपवाद क्लास हैं, Ruby में बाकी सब की तरह! एक नए प्रकार का अपवाद बनाने के लिए, बस एक क्लास बनाएं जो StandardError, या उसके बच्चों में से एक से इनहेरिट करती है। class MyError < StandardError end raise MyError