Junior
Jak fungují klíčová slova 'super' a 'this' v Kotlinu?
sobes.tech AI
Odpověď od AI
this odkazuje na aktuální instanci třídy nebo příjemce lambda výrazu. Používá se k explicitnímu označení člena třídy nebo odkazu na aktuální objekt, když je zřejmá nejednoznačnost (například když místní proměnná má stejné jméno).
super se používá k volání metod nebo přístupu k vlastnostem rodičovské třídy. Používá se, když je třeba použít implementaci rodičovské třídy namísto přepsané implementace v aktuální třídě.
Příklady:
class MyClass(val value: Int) {
fun printValue() {
println(this.value) // Explicitní použití this pro přístup k vlastnosti
}
}
open class Parent {
open fun greet() {
println("Ahoj od rodiče")
}
}
class Child : Parent() {
override fun greet() {
super.greet() // Volání metody rodičovské třídy
println("Ahoj od dítěte")
}
}
Při použití v lambda funkcích může this odkazovat na příjemce lambda:
fun String.addExclamation(): String {
return this + "!" // this odkazuje na řetězec příjemce
}
fun main() {
val numbers = listOf(1, 2, 3)
val sum = numbers.sum() // sum je rozšířením funkce, this uvnitř odkazuje na seznam numbers
println(sum)
}
Pro řešení nejednoznačnosti, když máte vnořené třídy nebo lambdy s příjemci, můžete použít kvalifikované this (this@ClassName nebo this@label):
class A { // implicitní štítek @A
inner class B { // implicitní štítek @B
fun Int.foo() { // implicitní štítek @foo
val a = this@A // odkaz na instanci A
val b = this@B // odkaz na instanci B
val c = this // odkaz na instanci Int, příjemce funkce foo
val c1 = this@foo // odkaz na instanci Int, příjemce funkce foo
}
}
}