Junior
Ako fungujú kľúčové slová 'super' a 'this' v Kotlin?
sobes.tech AI
Odpoveď od AI
this odkazuje na aktuálny inštanciu triedy alebo príjemcu lambda výrazu. Používa sa na explicitné označenie člena triedy alebo odkaz na aktuálny objekt, keď existuje nejasnosť (napríklad, keď má lokálna premenná rovnaké meno).
super sa používa na volanie metód alebo prístup k vlastnostiam rodičovskej triedy. Používa sa, keď je potrebné použiť implementáciu rodičovskej triedy namiesto prepísanej implementácie v aktuálnej triede.
Príklady:
class MyClass(val value: Int) {
fun printValue() {
println(this.value) // Priame použitie this na prístup k vlastnosti
}
}
open class Parent {
open fun greet() {
println("Ahoj od rodiča")
}
}
class Child : Parent() {
override fun greet() {
super.greet() // Volanie metódy rodičovskej triedy
println("Ahoj od dieťaťa")
}
}
Keď sa používa v lambda funkciách, this môže odkazovať na príjemcu lambda:
fun String.addExclamation(): String {
return this + "!" // this odkazuje na prijímajúci reťazec
}
fun main() {
val numbers = listOf(1, 2, 3)
val sum = numbers.sum() // sum je rozšírená funkcia, this vnútri odkazuje na zoznam numbers
println(sum)
}
Na vyriešenie nejasností, keď máte vnorené triedy alebo lambdy s príjemcami, môžete použiť kvalifikovaný this (this@ClassName alebo this@label):
class A { // nepriama značka @A
inner class B { // nepriama značka @B
fun Int.foo() { // nepriama značka @foo
val a = this@A // odkaz na inštanciu A
val b = this@B // odkaz na inštanciu B
val c = this // odkaz na inštanciu Int, príjemcu funkcie foo
val c1 = this@foo // odkaz na inštanciu Int, príjemcu funkcie foo
}
}
}