Sobes.tech
Junior

Hogyan működnek a 'super' és 'this' kulcsszavak Kotlinban?

sobes.tech MI

Válasz az MI-től

Ez a this az aktuális példányra utal az osztályból vagy a lambda kifejezés fogadójára. Ezt arra használják, hogy egyértelműen megjelöljenek egy osztálytagot vagy a jelenlegi objektumra való hivatkozást, amikor kétértelműség áll fenn (például, ha ugyanaz a név egy helyi változóban is szerepel).

A super az ősosztály metódusainak hívására vagy tulajdonságainak elérésére szolgál. Akkor használják, amikor az ősosztály implementációját akarják használni ahelyett, hogy felülírtnak tekintett implementációt alkalmaznának a jelenlegi osztályban.

Példák:

class MyClass(val value: Int) {
    fun printValue() {
        println(this.value) // Egyértelmű `this` használata a tulajdonság eléréséhez
    }
}

open class Parent {
    open fun greet() {
        println("Üdvözlet az ősosztályból")
    }
}

class Child : Parent() {
    override fun greet() {
        super.greet() // Az ősosztály metódusának hívása
        println("Üdvözlet a gyermekből")
    }
}

Lambda függvényekben a this a lambda fogadójára utalhat:

fun String.addExclamation(): String {
    return this + "!" // this a fogadó stringre utal
}

fun main() {
    val numbers = listOf(1, 2, 3)
    val sum = numbers.sum() // sum egy kiterjesztő függvény, a this a listára utal
    println(sum)
}

A kétértelműség feloldásához, ha beágyazott osztályok vagy lambda fogadók vannak, használhatja a kvalifikált this-t (this@ClassName vagy this@label):

class A { // implicit címke @A
    inner class B { // implicit címke @B
        fun Int.foo() { // implicit címke @foo
            val a = this@A // az A példányára való hivatkozás
            val b = this@B // a B példányára való hivatkozás
            val c = this // az Int példányára, a `foo` függvény fogadójára
            val c1 = this@foo // az Int példányára, a `foo` függvény fogadójára
        }
    }
}