Middle
Mi a különbség egy osztályon belüli objektum és egy társ objektum között Kotlinban?
sobes.tech MI
Válasz az MI-től
Egy inner object egy osztályon belül kötött a külső osztály példányához, és csak az életciklusa során létezik. A companion object singletonként létezik, nem kötött egy példányhoz, és közvetlenül elérhető a osztály nevével.
Fő különbségek:
- Kapcsolat a példánnyal: az
inner objectkötött egy külső példányhoz, acompanion objectnem. - Hozzáférés: az
inner object-hez csak egy példányon keresztül lehet hozzáférni, acompanion object-hez közvetlenül az osztály nevével. - Állapot: az
inner object-nek lehet példány-specifikus állapota, acompanion objectaz egész osztályra vonatkozik. - Használat: az
inner objectgyakran használják a State mintázat megvalósítására vagy kapcsolódó objektumok csoportosítására egy példányon belül. Acompanion objectgyárfüggvényekhez, állandókhoz vagy statikus osztálytagokhoz használatos.
Példa:
class Outer {
private var outerValue: Int = 0
inner object InnerObject {
fun accessOuterValue(): Int {
return outerValue // az inner object hozzáfér a külső osztály tagjaihoz
}
}
companion object CompanionObject {
const val CONSTANT = "Some constant"
fun createOuter(): Outer {
return Outer() // gyárfüggvény
}
}
}
fun main() {
val outer = Outer.CompanionObject.createOuter() // hozzáférés a companion object-hez
// val inner = Outer.InnerObject // Hiba: nem lehet hozzáférni az InnerObject-hez külső példány nélkül
val inner = outer.InnerObject // hozzáférés az inner object-hez a példányon keresztül
println(inner.accessOuterValue())
println(Outer.CompanionObject.CONSTANT)
println(Outer.CONSTANT) // szintaktikus cukor a CompanionObject tagjaihoz való hozzáféréshez
}