Sobes.tech
Middle

Koja je razlika između objekta unutar klase i companion objekta u Kotlinu?

sobes.tech АИ

Одговор од АИ

Unutrašnji objekat (inner object) unutar klase je povezan sa instancom spoljašnje klase i postoji samo tokom njenog životnog ciklusa. Objekt saputnik (companion object) postoji kao singleton, nije povezan sa instancom klase i može biti direktno dostupan putem imena klase.

Glavne razlike:

  • Veza sa instancom: inner object je povezan sa instancom spoljašnje klase, companion object nije.
  • Pristup: do inner object može se doći samo putem instance spoljašnje klase, do companion object direktno putem imena klase.
  • Stanje: inner object može imati stanje specifično za instancu, companion object je zajednički za celu klasu.
  • Upotreba: inner object se često koristi za implementaciju obrasca State ili za grupisanje povezanih objekata unutar instance. companion object se koristi za fabričke metode, konstante ili statičke članove klase.

Primer:

class Outer {
    private var outerValue: Int = 0

    inner object InnerObject {
        fun accessOuterValue(): Int {
            return outerValue // inner object ima pristup članovima spoljašnje klase
        }
    }

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

        fun createOuter(): Outer {
            return Outer() // fabrička metoda
        }
    }
}

fun main() {
    val outer = Outer.CompanionObject.createOuter() // pristup objektu saputniku
    // val inner = Outer.InnerObject // Greška: ne može se pristupiti InnerObject bez instance Outer
    val inner = outer.InnerObject // pristup unutrašnjem objektu putem instance

    println(inner.accessOuterValue())
    println(Outer.CompanionObject.CONSTANT)
    println(Outer.CONSTANT) // sintaksni šećer za pristup članovima CompanionObject
}