Sobes.tech
Middle

Ի՞նչ է տարբերությունը Kotlin-ում դասի ներսում գտնվող օբյեկտի և օբյեկտի գործընկերոջ միջև։

sobes.tech AI

Պատասխան AI-ից

Ներքին օբյեկտը (inner object) դասի ներսում կապված է արտաքին դասի օրինակին և գոյություն ունի միայն նրա կյանքի ցիկլի ընթացքում: Ընկերոջ օբյեկտը (companion object) գոյություն ունի որպես singleton, չի կապված դասի օրինակին և կարող է անմիջապես հասանելի լինել դասի անունով:

Հիմնական տարբերությունները:

  • Կապ օրինակին: inner object կապված է արտաքին դասի օրինակին, companion object — ոչ:
  • Մուտք: inner object-ին կարելի է մուտք գործել միայն արտաքին դասի օրինակով, companion object-ին — անմիջապես դասի անունով:
  • Կարգավիճակ: inner object-ը կարող է ունենալ վիճակ, որը հատուկ է օրինակին, companion object-ը ընդհանուր է ամբողջ դասի համար:
  • Օգտագործում: inner object-ը հաճախ օգտագործվում է State ձևանմուշի իրականացման կամ կապված օբյեկտների խմբավորումների համար օրինակի ներսում: companion object-ը օգտագործվում է գործարանային մեթոդների, հաստատունների կամ ստատիկ անդամների համար:

Օրինակ:

class Outer {
    private var outerValue: Int = 0

    inner object InnerObject {
        fun accessOuterValue(): Int {
            return outerValue // inner object ունի մուտք արտաքին դասի անդամներին
        }
    }

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

        fun createOuter(): Outer {
            return Outer() // գործարանային մեթոդ
        }
    }
}

fun main() {
    val outer = Outer.CompanionObject.createOuter() // մուտք դեպի ընկերոջ օբյեկտ
    // val inner = Outer.InnerObject // սխալ: հնարավոր չէ մուտք գործել InnerObject առանց Outer օրինակ ունենալու
    val inner = outer.InnerObject // մուտք դեպի ներքին օբյեկտ օրինակով

    println(inner.accessOuterValue())
    println(Outer.CompanionObject.CONSTANT)
    println(Outer.CONSTANT) // սինտակտիկ շաքար՝ մուտք դեպի CompanionObject անդամներ
}