Kotlin-də object: bu nədir, sintaksis və singleton obyektlərin tətbiqi

Müəllif: IT Sectr Dərc olunub: 2026-06-21 Oxuma vaxtı: 9 dəq

object Kotlin-də — bu, gecikmiş inisializasiya və standart olaraq thread-safe olan singleton obyekti yaratmağın deklarativ üsuludur. object açar sözü tək nüsxəli bütün bir sinfi əvəz edir və singleton, companion object, anonim obyektlər və statik utilitlər elan etmək üçün istifadə olunur. JetBrains Kotlin Documentation (2026)-ə görə, object declaration JVM dünyasında singleton-u həyata keçirməyin ən sadə və təhlükəsiz üsuludur.

Əsas məqamlar

  • object — tək nüsxəli singleton sinfi elan etmək üçün açar söz
  • Gecikmiş inisializasiya — object sinif yüklənərkən deyil, ilk müraciət zamanı yaradılır
  • Companion object — Kotlin-də statik üzvlərin analoqu (static açar sözü yoxdur)
  • Object expression — metodları anında dəyişdirmək üçün anonim obyekt
  • Thread-safe — object-in inisializasiyası zəmanətli şəkildə təhlükəsizdir

Kotlin-də object nədir?

object Kotlin-də — bu, eyni anda sinfi təyin edən və onun yeganə nüsxəsini (singleton) yaradan xüsusi elan formasıdır. Bu, bir konstruksiyada class declaration və instance creation-un hibrididir.

Java-da singleton yaratmaq üçün özəl konstruktor, statik sahə, getInstance metodu yazmaq və thread-safe-liyi təmin etmək lazımdır. Kotlin object bunu bir sətir kodla edir: object MySingleton { }. Kompilyator JVM bayt-kodunda static initializer mexanizmindən istifadə edərək thread-safe gecikmiş inisializasiyanı avtomatik yaradır.

Kotlin Language Specification (2026)-ə görə, object declaration özəl konstruktoru və statik blokda inisializasiya olunan INSTANCE statik sahəsi olan final sinfə kompilyasiya olunur. Bu, JVM səviyyəsində inisializasiyanın atomarlığını təmin edir.

Singleton obyektləri (object declaration)

Object declaration (singleton obyekti) object açar sözü və ondan sonra ad gələrək elan edilir. Obyektin gövdəsi xassələr, metodlar, init blokları ehtiva edə bilər və digər siniflərdən və ya interfeyslərdən miras ala bilər.

kotlin
object DatabaseManager {
    private val connection: String = "jdbc:postgresql://localhost:5432/app"
    
    fun query(sql: String): List<Map<String, Any>> {
        // sorğunun icrası
        return emptyList()
    }
}

// İstifadə
DatabaseManager.query("SELECT * FROM users")

DatabaseManager-in inisializasiyası ilk müraciət anında baş verir — gecikmiş və thread-safe şəkildə. Sinkronizasiya üçün heç bir əlavə kod tələb olunmur.

Object üçün miras

Object adi siniflərdən və interfeyslərdən miras ala bilər. Bu, object-in tək nüsxəli abstrakt sinif və ya interfeys implementasiyası kimi istifadəsinə imkan verir.

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

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

Companion object

companion object — bu, companion açar sözü ilə sinif daxilində elan edilmiş xüsusi object-dir. Kotlin-də static açar sözü olmadığı üçün statik üzvləri əvəz edir.

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

// ApiClient nüsxəsi yaratmadan çağırış
val client = ApiClient.create()

Companion object-in adı ola bilər (standart Companion), interfeysləri implementasiya edə bilər və extension functions vasitəsilə genişləndirilə bilər. Java-dakı statik metodlardan fərqli olaraq, companion object tam hüquqlu obyektdir, arqument kimi ötürülə və ya dəyişənə mənimsədilə bilər.

Kotlin Best Practices (2026)-ə görə, companion object fabrik metodları, sabitlər və siniflə əlaqəli statik utilitlər üçün istifadə olunur. Həddindən artıq companion object istifadəsindən qaçınmaq tövsiyə olunur — əlaqəsiz utilitlər üçün ən yüksək səviyyəli funksiyalardan istifadə etmək daha yaxşıdır.

@JvmStatic annotasiyası

Java ilə uyğunluq üçün companion object metodları @JvmStatic ilə annotasiya edilə bilər. Bu, JVM bayt-kodunda həqiqi statik metod yaradır və Java kodundan Companion sintaksisi olmadan əlçatan olur.

Object expressions (anonim obyektlər)

Object expression — ayrıca adlandırılmış sinif elan etmədən sinif və ya interfeys metodlarını dəyişdirmək üçün yerində yaradılan anonim obyektdir.

kotlin
val handler = object : Runnable {
    override fun run() {
        println("Tapşırıq icra edildi")
    }
}

thread(handler)

Object expressions object elanlarından fərqlənir ki, onlar hər icrada yeni nüsxə yaradır. Onlar singleton deyil və adı yoxdur. Anonim obyektlər lambdalar kimi domknyatdan dəyişənləri tuta bilər.

Java-da anonim siniflər yalnız bir tipi miras ala bildiyi halda, Kotlin object expression bir neçə tipi eyni anda miras ala bilər.

kotlin
interface Clickable {
    fun click()
}

abstract class View {
    abstract fun render()
}

val button = object : View(), Clickable {
    override fun render() = println("Düymənin renderi")
    override fun click() = println("Düymə klikləndi")
}

Praktik istifadə ssenariləri

Object — Kotlin-in ən universal konstruksiyalarından biridir, bir çox ssenaridə tətbiq olunur.

Singleton repozitorilər

Android layihələrində object çox vaxt çoxlu nüsxə tələb olunmayan Repository elan etmək üçün istifadə olunur. Tək nüsxə məlumatların ardıcıllığını təmin edir.

kotlin
object UserRepository {
    fun getUser(id: Int): User? {
        // istifadəçinin alınması
        return null
    }
}

Companion object vasitəsilə fabrik metodları

Companion object fabrik metodları ilə — çoxsaylı konstruktorlara alternativdir. Adlandırılmış fabrik metodları kodu öz-özünü sənədləşdirən edir.

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

Sabitlər və sadalamalar

Object Java-dakı statik final sahələrini əvəz edərək sabitlər üçün konteyner rolunu oynaya bilər. Object mirası dəstəkləyir, bu da konfiqurasiya iyerarxiyaları yaratmağa imkan verir.

Kotlin Standard Library (2026)-ə görə, object declaration Kotlin-də singleton yaratmağın ən məhsuldar üsuludur, sürət baxımından "double-checked locking" implementasiyalarını üstələyir və Java-da enum singleton ilə müqayisə olunandır.

Tez-tez verilən suallar

Object adi sinifdən nə ilə fərqlənir?

Object eyni anda sinfi elan edir və onun yeganə nüsxəsini yaradır. Adi sinif konstruktor vasitəsilə yaradılan çoxsaylı nüsxələrə malik ola bilər.

Object declaration nə vaxt inisializasiya olunur?

Gecikmiş — obyektə ilk müraciət zamanı. Bundan əvvəl yaddaş ayrılmır və init blokundakı kod icra olunmur.

Object-in konstruktoru ola bilər?

Xeyr, object-in açıq konstruktoru ola bilməz. İnisializasiya obyektə ilk müraciət zamanı bir dəfə çağırılan init blokunda aparılır.

Companion object adi object-dən nə ilə fərqlənir?

companion object — sinif daxilində elan edilmiş object-dir. Onun üzvləri nüsxə yaratmadan sinif adı vasitəsilə əlçatandır, bu da Java-nın statik üzvlərini əvəz edir.

Object declarations çoxthread mühitində təhlükəsizdirmi?

Bəli, object-in inisializasiyası JVM statik inisializatoru sayəsində tam thread-safe-dir. Heç bir əlavə sinkronizasiya tələb olunmur.

Nəticə

  • object — gecikmiş və thread-safe inisializasiyalı deklarativ singleton
  • companion object — Kotlin-də statik üzvlər, fabrik metodları, sabitlər
  • Object expression — domknyatdan dəyişənləri tutan anonim obyektlər
  • Miras — object siniflərdən və interfeyslərdən, o cümlədən bir neçə tipdən miras ala bilər
  • Performans — JVM static initializer vasitəsilə inisializasiya, double-checked locking yükü olmadan
  • Tətbiq — singleton xidmətlər, repozitorilər, sabitlər, fabrikalar, listener adapterləri
  • Məhdudiyyətlər — açıq konstruktorun olmaması, bütün JVM üçün bir nüsxə

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun