object Kotlin میں ایک سنگلٹن آبجیکٹ بنانے کا اعلانیہ طریقہ ہے جس میں بطور ڈیفالٹ سست ابتداء اور تھریڈ سیفٹی ہوتی ہے۔ object کلیدی لفظ ایک پوری کلاس کو ایک واحد مثال سے بدل دیتا ہے اور سنگلٹن، companion object، گمنام آبجیکٹ اور جامد افادیتی پروگراموں کے اعلان کے لیے استعمال ہوتا ہے۔ JetBrains Kotlin Documentation (2026) کے مطابق، object declaration JVM کی دنیا میں سنگلٹن کو نافذ کرنے کا سب سے آسان اور محفوظ طریقہ ہے۔
اہم نکات
object Kotlin میں ایک خاص اعلانی شکل ہے جو بیک وقت ایک کلاس کی تعریف کرتی ہے اور اس کی واحد مثال (سنگلٹن) بناتی ہے۔ یہ ایک ہی تعمیر میں کلاس کے اعلان اور مثال کی تخلیق کا مرکب ہے۔
Java میں، سنگلٹن بنانے کے لیے ایک نجی کنسٹرکٹر، ایک جامد فیلڈ، ایک getInstance طریقہ اور تھریڈ سیفٹی ہینڈلنگ کی ضرورت ہوتی ہے۔ Kotlin object یہ کوڈ کی ایک لائن میں کرتا ہے: object MySingleton { }۔ کمپائلر JVM بائٹ کوڈ میں static initializer میکانزم کا استعمال کرتے ہوئے خودکار طور پر تھریڈ سیف سست ابتداء پیدا کرتا ہے۔
Kotlin زبان کی وضاحت (2026) کے مطابق، object declaration ایک حتمی کلاس میں مرتب ہوتا ہے جس میں ایک نجی کنسٹرکٹر اور ایک جامد بلاک میں ابتداء کردہ جامد INSTANCE فیلڈ ہوتا ہے۔ یہ JVM سطح پر ابتداء کی ایٹمیت کو یقینی بناتا ہے۔
Object declaration (سنگلٹن آبجیکٹ) object کلیدی لفظ کے بعد ایک نام کا استعمال کرتے ہوئے اعلان کیا جاتا ہے۔ آبجیکٹ کے جسم میں خصوصیات، طریقے، init بلاک ہو سکتے ہیں اور یہ دوسری کلاسوں یا انٹرفیسز سے وراثت حاصل کر سکتا ہے۔
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 استعمال کرنے کی اجازت دیتا ہے۔
interface Logger {
fun log(message: String)
}
object ConsoleLogger : Logger {
override fun log(message: String) {
println("[LOG] $message")
}
}
companion object ایک خاص object ہے جو companion کلیدی لفظ کے ساتھ ایک کلاس کے اندر اعلان کیا جاتا ہے۔ یہ Kotlin میں جامد ارکان کی جگہ لیتا ہے کیونکہ زبان میں static کلیدی لفظ نہیں ہے۔
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 کے ضرورت سے زیادہ استعمال سے بچنے کی سفارش کی جاتی ہے - غیر متعلقہ افادیتی پروگراموں کے لیے اعلیٰ سطحی فنکشن بہتر ہیں۔
Java مطابقت کے لیے، companion object کے طریقوں کو @JvmStatic سے تشریح کیا جا سکتا ہے۔ اس سے JVM بائٹ کوڈ میں ایک حقیقی جامد طریقہ پیدا ہوتا ہے، جو Companion نحو کے بغیر Java کوڈ سے قابل رسائی ہے۔
Object expression ایک گمنام آبجیکٹ ہے جو موقع پر کسی کلاس یا انٹرفیس کے طریقوں کو اوور رائڈ کرنے کے لیے بنایا جاتا ہے، بغیر علیحدہ نامزد کلاس کے اعلان کے۔
val handler = object : Runnable {
override fun run() {
println("کام انجام دیا گیا")
}
}
thread(handler)
Object expressions object کے اعلان سے اس لحاظ سے مختلف ہیں کہ وہ ہر بار عملدرآمد پر ایک نیا نمونہ بناتے ہیں۔ وہ سنگلٹن نہیں ہیں اور ان کا کوئی نام نہیں ہے۔ گمنام آبجیکٹ لیمبڈا کی طرح اپنے بندھن سے متغیرات حاصل کر سکتے ہیں۔
Java کے برعکس، جہاں گمنام کلاسیں صرف ایک قسم سے وراثت حاصل کر سکتی ہیں، Kotlin کا object expression بیک وقت متعدد اقسام سے وراثت حاصل کر سکتا ہے۔
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 کی سب سے ورسٹائل تعمیرات میں سے ایک ہے، جو بہت سے منظرناموں میں استعمال ہوتا ہے۔
Android منصوبوں میں، object اکثر Repository کے اعلان کے لیے استعمال ہوتا ہے جہاں متعدد مثالوں کی ضرورت نہیں ہوتی۔ ایک واحد مثال ڈیٹا مستقل مزاجی کو یقینی بناتی ہے۔
object UserRepository {
fun getUser(id: Int): User? {
// صارف حاصل کرنا
return null
}
}
Companion object فیکٹری طریقوں کے ساتھ متعدد کنسٹرکٹرز کا متبادل ہے۔ نامزد فیکٹری طریقے کوڈ کو خود دستاویزی بناتے ہیں۔
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 بیک وقت ایک کلاس کا اعلان کرتا ہے اور اس کی واحد مثال بناتا ہے۔ ایک عام کلاس میں کنسٹرکٹر کے ذریعے بنائی گئی متعدد مثالیں ہو سکتی ہیں۔
سست - آبجیکٹ تک پہلی رسائی پر۔ اس وقت تک، کوئی میموری مختص نہیں ہوتی اور init بلاک میں کوڈ عمل نہیں ہوتا۔
نہیں، object کا واضح کنسٹرکٹر نہیں ہو سکتا۔ ابتداء init بلاک میں کی جاتی ہے، جو آبجیکٹ تک پہلی رسائی پر ایک بار بلایا جاتا ہے۔
companion object ایک object ہے جو ایک کلاس کے اندر اعلان کیا جاتا ہے۔ اس کے اراکین مثال بنائے بغیر کلاس کے نام کے ذریعے قابل رسائی ہیں، Java کے جامد ارکان کو بدل کر۔
ہاں، object کی ابتداء JVM جامد ابتداء کرنے والے کی بدولت مکمل طور پر thread-safe ہے۔ کسی اضافی ہم آہنگی کی ضرورت نہیں ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں