Comment fonctionnent les mots-clés 'super' et 'this' en Kotlin?
sobes.tech IA
Réponse de l'IA
this fait référence à l'instance courante de la classe ou au destinataire d'une expression lambda. Il est utilisé pour indiquer explicitement un membre de la classe ou une référence à l'objet actuel lorsqu'il y a ambiguïté (par exemple, lorsqu'une variable locale porte le même nom).
super est utilisé pour appeler des méthodes ou accéder à des propriétés de la classe parente. Il s'applique lorsque vous souhaitez utiliser l'implémentation de la classe parente au lieu de l'implémentation redéfinie dans la classe actuelle.
Exemples :
class MyClass(val value: Int) {
fun printValue() {
println(this.value) // Utilisation explicite de this pour accéder à la propriété
}
}
open class Parent {
open fun greet() {
println("Bonjour du parent")
}
}
class Child : Parent() {
override fun greet() {
super.greet() // Appel à la méthode de la classe parente
println("Bonjour de l'enfant")
}
}
Lorsqu'utilisé dans des fonctions lambda, this peut faire référence au receveur de la lambda :
fun String.addExclamation(): String {
return this + "!" // this fait référence à la chaîne receveuse
}
fun main() {
val numbers = listOf(1, 2, 3)
val sum = numbers.sum() // sum est une fonction d'extension, this dans la lambda fait référence à la liste numbers
println(sum)
}
Pour résoudre l'ambiguïté, lorsque vous avez des classes imbriquées ou des lambdas avec des receveurs, vous pouvez utiliser this@ClassName ou this@label :
class A { // étiquette implicite @A
inner class B { // étiquette implicite @B
fun Int.foo() { // étiquette implicite @foo
val a = this@A // référence à l'instance de A
val b = this@B // référence à l'instance de B
val c = this // référence à l'instance d'Int, le receveur de la fonction foo
val c1 = this@foo // référence à l'instance d'Int, le receveur de la fonction foo
}
}
}