Sobes.tech
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
        }
    }
}