Junior
Cum funcționează cuvintele cheie 'super' și 'this' în Kotlin?
sobes.tech AI
Răspuns de la AI
this face referire la instanța curentă a clasei sau la destinatarul unei expresii lambda. Este utilizat pentru a indica explicit un membru al clasei sau o referință la obiectul curent atunci când există ambiguitate (de exemplu, când o variabilă locală are același nume).
super este folosit pentru a apela metode sau pentru a accesa proprietăți din clasa părinte. Se aplică atunci când trebuie să folosiți implementarea clasei părinte în loc de cea suprascrisă în clasa curentă.
Exemple:
class MyClass(val value: Int) {
fun printValue() {
println(this.value) // Utilizare explicită a this pentru accesarea proprietății
}
}
open class Parent {
open fun greet() {
println("Salut din părintele")
}
}
class Child : Parent() {
override fun greet() {
super.greet() // Apelarea metodei din clasa părinte
println("Salut din copil")
}
}
Când este utilizat în funcții lambda, this poate face referire la receptorul lambda:
fun String.addExclamation(): String {
return this + "!" // this face referire la șirul receptor
}
fun main() {
val numbers = listOf(1, 2, 3)
val sum = numbers.sum() // sum este o funcție de extensie, this în interior face referire la lista numbers
println(sum)
}
Pentru a rezolva ambiguitățile, atunci când aveți clase imbricate sau lambdas cu receptori, puteți folosi this@ClassName sau this@label:
class A { // etichetă implicită @A
inner class B { // etichetă implicită @B
fun Int.foo() { // etichetă implicită @foo
val a = this@A // referință la instanța A
val b = this@B // referință la instanța B
val c = this // referință la instanța de Int, receptorul funcției foo
val c1 = this@foo // referință la instanța de Int, receptorul funcției foo
}
}
}