Middle
Quelle est la différence entre un objet à l'intérieur d'une classe et un compagnon d'objet en Kotlin?
sobes.tech IA
Réponse de l'IA
Un objet interne (inner object) à l'intérieur d'une classe est lié à une instance de la classe externe et n'existe que dans son cycle de vie. L'objet compagnon (companion object) existe en tant que singleton, non lié à une instance de la classe, et peut être accessible directement via le nom de la classe.
Principales différences :
- Liaison à l'instance :
inner objectest lié à une instance de la classe externe,companion objectne l'est pas. - Accès : on peut accéder à
inner objectuniquement via une instance de la classe externe, àcompanion objectdirectement via le nom de la classe. - État :
inner objectpeut avoir un état spécifique à l'instance,companion objectest commun à toute la classe. - Utilisation :
inner objectest souvent utilisé pour implémenter le pattern State ou pour grouper des objets liés à l'intérieur d'une instance.companion objectest utilisé pour des méthodes de fabrique, des constantes ou des membres statiques de la classe.
Exemple :
class Outer {
private var outerValue: Int = 0
inner object InnerObject {
fun accessOuterValue(): Int {
return outerValue // inner object a accès aux membres de la classe externe
}
}
companion object CompanionObject {
const val CONSTANT = "Some constant"
fun createOuter(): Outer {
return Outer() // méthode de fabrique
}
}
}
fun main() {
val outer = Outer.CompanionObject.createOuter() // accès au companion object
// val inner = Outer.InnerObject // Erreur : impossible d'accéder à InnerObject sans une instance de Outer
val inner = outer.InnerObject // accès à l'objet interne via l'instance
println(inner.accessOuterValue())
println(Outer.CompanionObject.CONSTANT)
println(Outer.CONSTANT) // sucre syntaxique pour accéder aux membres de CompanionObject
}