Sobes.tech
Middle

Wat is het verschil tussen een object binnen een klasse en een companion object in Kotlin?

sobes.tech AI

Antwoord van AI

Een inner object binnen een klasse is gekoppeld aan een instantie van de externe klasse en bestaat alleen tijdens de levenscyclus ervan. Het companion object bestaat als singleton, niet gekoppeld aan een instantie van de klasse, en kan direct worden benaderd via de naam van de klasse.

Belangrijkste verschillen:

  • Koppeling aan de instantie: inner object is gekoppeld aan een instantie van de externe klasse, companion object niet.
  • Toegang: tot inner object kan alleen via een instantie van de externe klasse worden verkregen, tot companion object direct via de naam van de klasse.
  • Toestand: inner object kan een toestand hebben die specifiek is voor de instantie, companion object is gemeenschappelijk voor de hele klasse.
  • Gebruik: inner object wordt vaak gebruikt voor het implementeren van het State-patroon of voor het groeperen van gerelateerde objecten binnen een instantie. companion object wordt gebruikt voor fabrieksmethoden, constanten of statische leden van de klasse.

Voorbeeld:

class Outer {
    private var outerValue: Int = 0

    inner object InnerObject {
        fun accessOuterValue(): Int {
            return outerValue // inner object heeft toegang tot de leden van de externe klasse
        }
    }

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

        fun createOuter(): Outer {
            return Outer() // fabrieksmethode
        }
    }
}

fun main() {
    val outer = Outer.CompanionObject.createOuter() // toegang tot het companion object
    // val inner = Outer.InnerObject // Fout: kan niet zonder een instantie van Outer toegang krijgen tot InnerObject
    val inner = outer.InnerObject // toegang tot inner object via de instantie

    println(inner.accessOuterValue())
    println(Outer.CompanionObject.CONSTANT)
    println(Outer.CONSTANT) // syntactische suiker voor toegang tot leden van CompanionObject
}