Sobes.tech
Middle

Kotlin-də sinif daxilində obyekt və obyekt yoldaşı arasındakı fərq nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Klass daxilində inner object xarici klassın nümunəsinə bağlıdır və yalnız onun həyat dövrü ərzində mövcuddur. companion object isə singleton kimi mövcuddur, klassın nümunəsinə bağlı deyil və birbaşa klass adından əldə edilə bilər.

Əsas fərqlər:

  • Nümunəyə bağlılıq: inner object xarici klassın nümunəsinə bağlıdır, companion object bağlı deyil.
  • Əlçatanlıq: inner object-ə yalnız xarici klassın nümunəsi vasitəsilə daxil olmaq mümkündür, companion object-ə isə birbaşa klass adı ilə.
  • Vəziyyət: inner object nümunəyə xas vəziyyətə sahib ola bilər, companion object isə bütün klass üçün ümumi.
  • İstifadə: inner object çox vaxt State şablonunun həyata keçirilməsi və ya əlaqəli obyektlərin nümunə daxilində qruplaşdırılması üçün istifadə olunur. companion object fabrik metodları, sabitlər və ya statik üzvlər üçün istifadə olunur.

Nümunə:

class Outer {
    private var outerValue: Int = 0

    inner object InnerObject {
        fun accessOuterValue(): Int {
            return outerValue // inner object xarici klassın üzvlərinə daxil ola bilər
        }
    }

    companion object CompanionObject {
        const val CONSTANT = "Some constant"

        fun createOuter(): Outer {
            return Outer() // fabrik metodu
        }
    }
}

fun main() {
    val outer = Outer.CompanionObject.createOuter() // companion object-ə giriş
    // val inner = Outer.InnerObject // Xəta: Outer nümunəsi olmadan InnerObject-ə daxil olmaq mümkün deyil
    val inner = outer.InnerObject // nümunə vasitəsilə inner obyektə giriş

    println(inner.accessOuterValue())
    println(Outer.CompanionObject.CONSTANT)
    println(Outer.CONSTANT) // sintaktik şəkər: CompanionObject üzvlərinə giriş
}