Middle
Kuo skiriasi objektas klasės viduje ir bendrasis objektas Kotlin?
sobes.tech AI
Atsakymas iš AI
Objektas klasės viduje (inner object) yra susietas su išorinio klaso egzemplioriumi ir egzistuoja tik jo gyvavimo ciklo metu. Objekto partneris (companion object) egzistuoja kaip singletonas, nesusijęs su klaso egzemplioriumi ir gali būti pasiekiamas tiesiogiai per klaso pavadinimą.
Pagrindiniai skirtumai:
- Susiejimas su egzemplioriumi:
inner objectyra susietas su išorinio klaso egzemplioriumi,companion objectnėra. - Prieiga: prie
inner objectgalima prieiti tik per išorinio klaso egzempliorių, priecompanion object- tiesiogiai per klaso pavadinimą. - Būklė:
inner objectgali turėti būseną, būdingą egzemplioriui,companion object- bendrą viso klaso būseną. - Naudojimas:
inner objectdažnai naudojamas State šablono įgyvendinimui arba susijusių objektų grupavimui klaso egzemplioriaus viduje.companion objectnaudojamas fabrikos metodams, konstantoms ar statiniams klases nariams.
Pavyzdys:
class Outer {
private var outerValue: Int = 0
inner object InnerObject {
fun accessOuterValue(): Int {
return outerValue // inner object turi prieigą prie išorinio klaso narių
}
}
companion object CompanionObject {
const val CONSTANT = "Some constant"
fun createOuter(): Outer {
return Outer() // fabrikos metodas
}
}
}
fun main() {
val outer = Outer.CompanionObject.createOuter() // prieiga prie companion object
// val inner = Outer.InnerObject // klaida: negalima pasiekti InnerObject be išorinio klaso egzemplioriaus
val inner = outer.InnerObject // prieiga prie inner object per egzempliorių
println(inner.accessOuterValue())
println(Outer.CompanionObject.CONSTANT)
println(Outer.CONSTANT) // sintaksės cukrus prieigai prie CompanionObject narių
}