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 անդամներ
}