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 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.
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.
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 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.
interface Logger {
fun log(message: String)
}
object ConsoleLogger : Logger {
override fun log(message: String) {
println("[LOG] $message")
}
}
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.
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.
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 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.
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.
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")
}
Object — Kotlin-in ən universal konstruksiyalarından biridir, bir çox ssenaridə tətbiq olunur.
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.
object UserRepository {
fun getUser(id: Int): User? {
// istifadəçinin alınması
return null
}
}
Companion object fabrik metodları ilə — çoxsaylı konstruktorlara alternativdir. Adlandırılmış fabrik metodları kodu öz-özünü sənədləşdirən edir.
data class GsonParser {
companion object {
fun create(): GsonParser = GsonParser()
fun createPretty(): GsonParser = GsonParser()
}
}
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 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.
Gecikmiş — obyektə ilk müraciət zamanı. Bundan əvvəl yaddaş ayrılmır və init blokundakı kod icra olunmur.
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 — 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.
Bəli, object-in inisializasiyası JVM statik inisializatoru sayəsində tam thread-safe-dir. Heç bir əlavə sinkronizasiya tələb olunmur.
Nəticə
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.
Həm də oxuyun