Kotlin में object: सिंटैक्स और सिंगलटन ऑब्जेक्ट का व्यावहारिक उपयोग

लेखक: IT Sectr प्रकाशित: 2026-06-21 पढ़ने का समय: 9 मिनट

object Kotlin में एक सिंगलटन ऑब्जेक्ट बनाने का घोषणात्मक तरीका है जिसमें डिफ़ॉल्ट रूप से लेज़ी इनिशियलाइज़ेशन और थ्रेड सेफ्टी होती है। object कीवर्ड एक पूरी क्लास को एकल इंस्टेंस से बदल देता है और इसका उपयोग सिंगलटन, companion object, अनाम ऑब्जेक्ट और स्टैटिक यूटिलिटीज़ घोषित करने के लिए किया जाता है। JetBrains Kotlin Documentation (2026) के अनुसार, object declaration JVM दुनिया में singleton लागू करने का सबसे सरल और सुरक्षित तरीका है।

मुख्य बिंदु

  • object - एकल इंस्टेंस वाली सिंगलटन क्लास घोषित करने के लिए कीवर्ड
  • लेज़ी इनिशियलाइज़ेशन - object पहली बार एक्सेस करने पर बनता है, क्लास लोड करने पर नहीं
  • Companion object - Kotlin में स्टैटिक सदस्यों का एनालॉग (static कीवर्ड नहीं है)
  • Object expression - मौके पर विधियों को ओवरराइड करने के लिए अनाम ऑब्जेक्ट
  • थ्रेड सुरक्षा - object का इनिशियलाइज़ेशन गारंटीड thread-safe है

Kotlin में object क्या है?

object Kotlin में एक विशेष घोषणा रूप है जो एक साथ एक क्लास को परिभाषित करता है और उसका एकल इंस्टेंस (singleton) बनाता है। यह एक ही निर्माण में क्लास घोषणा और इंस्टेंस निर्माण का मिश्रण है।

Java में, singleton बनाने के लिए एक प्राइवेट कंस्ट्रक्टर, एक स्टैटिक फ़ील्ड, एक getInstance विधि और थ्रेड सुरक्षा प्रबंधन की आवश्यकता होती है। Kotlin object यह एक पंक्ति के कोड में करता है: object MySingleton { }। कंपाइलर स्वचालित रूप से JVM बाइटकोड में static initializer तंत्र का उपयोग करके थ्रेड-सेफ लेज़ी इनिशियलाइज़ेशन उत्पन्न करता है।

Kotlin भाषा विनिर्देश (2026) के अनुसार, object declaration एक फ़ाइनल क्लास में संकलित होता है जिसमें प्राइवेट कंस्ट्रक्टर और एक स्टैटिक ब्लॉक में इनिशियलाइज़्ड स्टैटिक INSTANCE फ़ील्ड होता है। यह JVM स्तर पर इनिशियलाइज़ेशन की परमाणुता सुनिश्चित करता है।

सिंगलटन ऑब्जेक्ट (object declaration)

Object declaration (सिंगलटन ऑब्जेक्ट) object कीवर्ड के बाद एक नाम का उपयोग करके घोषित किया जाता है। ऑब्जेक्ट के बॉडी में गुण, विधियाँ, init ब्लॉक हो सकते हैं और यह अन्य क्लास या इंटरफ़ेस से इनहेरिट कर सकता है।

kotlin
object DatabaseManager {
    private val connection: String = "jdbc:postgresql://localhost:5432/app"
    
    fun query(sql: String): List<Map<String, Any>> {
        // क्वेरी निष्पादित करना
        return emptyList()
    }
}

// उपयोग
DatabaseManager.query("SELECT * FROM users")

DatabaseManager का इनिशियलाइज़ेशन पहली एक्सेस पर होता है - लेज़ी और थ्रेड-सेफ। किसी अतिरिक्त सिंक्रनाइज़ेशन कोड की आवश्यकता नहीं है।

object के लिए इनहेरिटेंस

Object सामान्य क्लास और इंटरफ़ेस को इनहेरिट कर सकता है। यह एकल इंस्टेंस के साथ एब्सट्रैक्ट क्लास या इंटरफ़ेस के कार्यान्वयन के रूप में object का उपयोग करने की अनुमति देता है।

kotlin
interface Logger {
    fun log(message: String)
}

object ConsoleLogger : Logger {
    override fun log(message: String) {
        println("[LOG] $message")
    }
}

Companion object

companion object एक विशेष object है जो किसी क्लास के अंदर companion कीवर्ड के साथ घोषित किया जाता है। यह Kotlin में स्टैटिक सदस्यों को बदलता है क्योंकि भाषा में static कीवर्ड नहीं है।

kotlin
class ApiClient {
    companion object {
        private const val BASE_URL = "https://api.example.com"
        
        fun create(): ApiClient {
            return ApiClient()
        }
    }
}

// ApiClient इंस्टेंस बनाए बिना कॉल करना
val client = ApiClient.create()

Companion object का एक नाम हो सकता है (डिफ़ॉल्ट Companion है), इंटरफ़ेस लागू कर सकता है, और extension functions के माध्यम से विस्तारित किया जा सकता है। Java में स्टैटिक विधियों के विपरीत, companion object एक पूर्ण ऑब्जेक्ट है जिसे तर्क के रूप में पारित किया जा सकता है या एक वेरिएबल में संग्रहीत किया जा सकता है।

Kotlin सर्वोत्तम अभ्यास (2026) के अनुसार, companion object का उपयोग फ़ैक्टरी विधियों, स्थिरांक और क्लास से संबंधित स्टैटिक उपयोगिताओं के लिए किया जाता है। companion object के अत्यधिक उपयोग से बचने की अनुशंसा की जाती है - असंबंधित उपयोगिताओं के लिए टॉप-लेवल फ़ंक्शन बेहतर हैं।

@JvmStatic एनोटेशन

Java संगतता के लिए, companion object विधियों को @JvmStatic से एनोटेट किया जा सकता है। यह JVM बाइटकोड में एक वास्तविक स्टैटिक विधि उत्पन्न करता है, जो Companion सिंटैक्स के बिना Java कोड से सुलभ है।

Object expressions (अनाम ऑब्जेक्ट)

Object expression एक अनाम ऑब्जेक्ट है जो किसी क्लास या इंटरफ़ेस की विधियों को ओवरराइड करने के लिए मौके पर बनाया जाता है, बिना एक अलग नामित क्लास घोषित किए।

kotlin
val handler = object : Runnable {
    override fun run() {
        println("कार्य निष्पादित हुआ")
    }
}

thread(handler)

Object expressions, object घोषणाओं से इस मायने में भिन्न होते हैं कि वे प्रत्येक निष्पादन पर एक नया इंस्टेंस बनाते हैं। वे सिंगलटन नहीं हैं और उनका कोई नाम नहीं है। अनाम ऑब्जेक्ट लैम्ब्डा की तरह अपने क्लोज़र से वेरिएबल कैप्चर कर सकते हैं।

Java के विपरीत, जहाँ अनाम क्लास केवल एक प्रकार को इनहेरिट कर सकती हैं, Kotlin की object expression एक साथ कई प्रकारों को इनहेरिट कर सकती है।

kotlin
interface Clickable {
    fun click()
}

abstract class View {
    abstract fun render()
}

val button = object : View(), Clickable {
    override fun render() = println("बटन रेंडर हो रहा है")
    override fun click() = println("बटन पर क्लिक किया गया")
}

व्यावहारिक उपयोग के परिदृश्य

Object Kotlin की सबसे बहुमुखी संरचनाओं में से एक है, जिसका उपयोग कई परिदृश्यों में किया जाता है।

Repository सिंगलटन

Android परियोजनाओं में, object का उपयोग अक्सर Repository घोषित करने के लिए किया जाता है जहाँ कई इंस्टेंस की आवश्यकता नहीं होती। एकल इंस्टेंस डेटा स्थिरता सुनिश्चित करता है।

kotlin
object UserRepository {
    fun getUser(id: Int): User? {
        // उपयोगकर्ता प्राप्त करना
        return null
    }
}

companion object के माध्यम से फ़ैक्टरी विधियाँ

Companion object फ़ैक्टरी विधियों के साथ कई कंस्ट्रक्टरों का विकल्प है। नामित फ़ैक्टरी विधियाँ कोड को स्व-दस्तावेज़ीकृत बनाती हैं।

kotlin
data class GsonParser {
    companion object {
        fun create(): GsonParser = GsonParser()
        fun createPretty(): GsonParser = GsonParser()
    }
}

स्थिरांक और गणनाएँ

Object स्थिरांकों के लिए एक कंटेनर के रूप में काम कर सकता है, Java में static final फ़ील्ड को बदलता है। Object इनहेरिटेंस का समर्थन करता है, जो कॉन्फ़िगरेशन पदानुक्रम बनाने की अनुमति देता है।

Kotlin मानक पुस्तकालय (2026) के अनुसार, object declaration Kotlin में singleton बनाने का सबसे कुशल तरीका है, जो double-checked locking कार्यान्वयन से बेहतर है और Java में enum singleton के बराबर है।

अक्सर पूछे जाने वाले प्रश्न

object एक सामान्य क्लास से कैसे भिन्न है?

Object एक साथ एक क्लास घोषित करता है और उसका एकल इंस्टेंस बनाता है। एक सामान्य क्लास में कंस्ट्रक्टर के माध्यम से बनाए गए कई इंस्टेंस हो सकते हैं।

object declaration कब इनिशियलाइज़ होता है?

लेज़ी - ऑब्जेक्ट तक पहली पहुँच पर। तब तक, कोई मेमोरी आवंटित नहीं होती और init ब्लॉक में कोड निष्पादित नहीं होता।

क्या object का कंस्ट्रक्टर हो सकता है?

नहीं, object का स्पष्ट कंस्ट्रक्टर नहीं हो सकता। इनिशियलाइज़ेशन init ब्लॉक में किया जाता है, जो ऑब्जेक्ट तक पहली पहुँच पर एक बार कॉल होता है।

companion object सामान्य object से कैसे भिन्न है?

companion object एक object है जो किसी क्लास के अंदर घोषित किया जाता है। इसके सदस्य इंस्टेंस बनाए बिना क्लास नाम के माध्यम से सुलभ होते हैं, Java के स्टैटिक सदस्यों को बदलते हैं।

क्या object declarations मल्टीथ्रेडेड वातावरण में सुरक्षित हैं?

हाँ, object का इनिशियलाइज़ेशन JVM स्टैटिक इनिशियलाइज़र के कारण पूरी तरह से thread-safe है। किसी अतिरिक्त सिंक्रनाइज़ेशन की आवश्यकता नहीं है।

सारांश

  • object - लेज़ी और थ्रेड-सेफ इनिशियलाइज़ेशन के साथ घोषणात्मक सिंगलटन
  • companion object - Kotlin में स्टैटिक सदस्य, फ़ैक्टरी विधियाँ, स्थिरांक
  • Object expression - क्लोज़र से वेरिएबल कैप्चर के साथ मौके पर अनाम ऑब्जेक्ट
  • इनहेरिटेंस - object कई प्रकारों सहित क्लास और इंटरफ़ेस इनहेरिट कर सकता है
  • प्रदर्शन - JVM static initializer के माध्यम से इनिशियलाइज़ेशन, double-checked locking का कोई ओवरहेड नहीं
  • उपयोग - सिंगलटन सेवाएँ, repository, स्थिरांक, फ़ैक्टरी, listener एडेप्टर
  • सीमाएँ - कोई स्पष्ट कंस्ट्रक्टर नहीं, प्रति JVM एक इंस्टेंस

हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे

IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें