Kotlin dilində 'companion object' nədir və hansı hallarda istifadə olunmalıdır, izah edin.
sobes.tech Süni İntellekt
AI-dan cavab
companion object — sinfə ilə əlaqəli xüsusi obyekt olsa da, onun nümunəsi deyil. Java-dakı statik üzvlər kimi fəaliyyət göstərir.
Əsas nöqtələr:
companion objectsinif daxilindəcompanion objectaçar sözü ilə elan edilir.- Sinifin xüsusi üzvlərinə giriş imkanı verir.
- Adı ola bilər, amma adətən atlanır (
Companionadı istifadə olunur). companion objectüzvlərinə sinif adından birbaşa müraciət etmək mümkündür, nümunə yaratmadan.
İstifadə nümunələri:
-
Fabrika metodları: Adi konstruktorlardan daha mürəkkəb başlanğıc loqikası ilə sinif nümunələri yaratmaq üçün.
class MyClass private constructor(val value: String) { // Xüsusi konstruktor companion object { fun create(input: String): MyClass { // Fabrika metodu // Girişin emal loqikası return MyClass("Processed: $input") } } } fun main() { val instance = MyClass.create("some data") // Fabrika metodundan istifadə println(instance.value) } -
Sinf səviyyəsində sabitlər: Nümunə yaratmadan əlçatan olmalı olan dəyərləri təyin etmək üçün.
class Constants { companion object { const val DEFAULT_VALUE = "default" // Sabit } } fun main() { println(Constants.DEFAULT_VALUE) // Sabitə giriş } -
İnterfeyslərin tətbiqi:
companion objectinterfeysləri tətbiq edə bilər, bu da ümumi funksionallığa malik statik fabrikaları simulyasiya etmək üçün faydalıdır.interface Factory<T> { fun create(): T } class MyData(val id: Int) { companion object : Factory<MyData> { private var nextId = 0 override fun create(): MyData { return MyData(nextId++) } } } fun main() { val data1 = MyData.create() val data2 = MyData.create() println(data1.id) println(data2.id) } -
Genişləndirmələr:
companion objectgenişləndirilə bilər, bu da xaricdən "statik" metodlar əlavə etməyə imkan verir.class MyUtil { companion object { // Boş companion obyekti } } fun MyUtil.Companion.helperMethod() { // companion obyektinin genişləndirilməsi println("Called helper method") } fun main() { MyUtil.helperMethod() }
Ümumiyyətlə, companion object sinfə bağlı, lakin onun nümunəsini tələb etməyən funksionallıq üçün istifadə edilməlidir. Bu, Kotlin-də Java ilə əldə edilən statik üzvlərlə əldə edilən şeyi daha idiomatik şəkildə həyata keçirməyin yoludur və daha çox elastiklik təmin edir (məsələn, interfeyslərin tətbiqi və genişləndirmələr). Onu hər nümunə üçün unikal olması lazım olan vəziyyəti saxlamaq üçün sui-istifadə etməmək lazımdır.