Sobes.tech
Junior

Kuidas töötavad võtmesõnad 'super' ja 'this' Kotlinis?

sobes.tech AI

Vastus AI-lt

this viitab praegusele klassi eksemplarile või lambda väljenduse vastuvõtjale. Seda kasutatakse klassi liikme või praeguse objekti selgeks näitamiseks, kui tekib ebamäärasus (näiteks, kui on sama nimega kohalik muutja).

super kasutatakse vanema klassi meetodite väljakutsumiseks või omaduste kasutamiseks. Seda kasutatakse siis, kui on vaja kasutada vanema klassi rakendust asendatud rakenduse asemel praeguses klassis.

Näited:

class MyClass(val value: Int) {
    fun printValue() {
        println(this.value) // `this` kasutamine omaduse juurdepääsuks
    }
}

open class Parent {
    open fun greet() {
        println("Tervitus vanemast")
    }
}

class Child : Parent() {
    override fun greet() {
        super.greet() // vanema klassi meetodi väljakutse
        println("Tervitus lapsest")
    }
}

Lambda väljendites võib this viidata vastuvõtjale:

fun String.addExclamation(): String {
    return this + "!" // `this` viitab stringi vastuvõtjale
}

fun main() {
    val numbers = listOf(1, 2, 3)
    val sum = numbers.sum() // `sum` on laiendusfunktsioon, `this` viitab nimekirjale `numbers`
    println(sum)
}

Ebamäärasuse lahendamiseks, kui teil on sisemised klassid või lambda vastuvõtjatega, saate kasutada kvalifitseeritud this (näiteks, this@ClassName või this@label).

class A { // mitteotsene silt @A
    inner class B { // mitteotsene silt @B
        fun Int.foo() { // mitteotsene silt @foo
            val a = this@A // viide A eksemplarile
            val b = this@B // viide B eksemplarile
            val c = this // Int eksemplar, mis on `foo` funktsiooni vastuvõtja
            val c1 = this@foo // Int eksemplar, mis on `foo` funktsiooni vastuvõtja
        }
    }
}