Kotlin میں object: نحو اور سنگلٹن آبجیکٹ کا عملی استعمال

مصنف: IT Sectr اشاعت: 2026-06-21 مطالعے کا وقت: 9 منٹ

object Kotlin میں ایک سنگلٹن آبجیکٹ بنانے کا اعلانیہ طریقہ ہے جس میں بطور ڈیفالٹ سست ابتداء اور تھریڈ سیفٹی ہوتی ہے۔ object کلیدی لفظ ایک پوری کلاس کو ایک واحد مثال سے بدل دیتا ہے اور سنگلٹن، companion object، گمنام آبجیکٹ اور جامد افادیتی پروگراموں کے اعلان کے لیے استعمال ہوتا ہے۔ JetBrains Kotlin Documentation (2026) کے مطابق، object declaration JVM کی دنیا میں سنگلٹن کو نافذ کرنے کا سب سے آسان اور محفوظ طریقہ ہے۔

اہم نکات

  • object - ایک واحد مثال کے ساتھ سنگلٹن کلاس کے اعلان کے لیے کلیدی لفظ
  • سست ابتداء - object کلاس لوڈ ہونے پر نہیں بلکہ پہلی رسائی پر بنتا ہے
  • Companion object - Kotlin میں جامد ارکان کا مشابہ (static کلیدی لفظ نہیں ہے)
  • Object expression - موقع پر طریقوں کو اوور رائڈ کرنے کے لیے گمنام آبجیکٹ
  • تھریڈ تحفظ - object کی ابتداء ضمانتی طور پر thread-safe ہے

Kotlin میں object کیا ہے؟

object Kotlin میں ایک خاص اعلانی شکل ہے جو بیک وقت ایک کلاس کی تعریف کرتی ہے اور اس کی واحد مثال (سنگلٹن) بناتی ہے۔ یہ ایک ہی تعمیر میں کلاس کے اعلان اور مثال کی تخلیق کا مرکب ہے۔

Java میں، سنگلٹن بنانے کے لیے ایک نجی کنسٹرکٹر، ایک جامد فیلڈ، ایک 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 میں سنگلٹن بنانے کا سب سے موثر طریقہ ہے، جو double-checked locking کے نفاذ سے بہتر ہے اور Java میں enum سنگلٹن کے برابر ہے۔

اکثر پوچھے گئے سوالات

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، مستقلات، فیکٹریاں، سننے والے اڈیپٹر
  • حدود - کوئی واضح کنسٹرکٹر نہیں، فی JVM ایک مثال

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں