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
}
}
}