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