Junior
Kā darbojas atslēgvārdi 'super' un 'this' Kotlin?
sobes.tech AI
Atbilde no AI
this atsaucas uz aktuālo klases piemēru vai lambda izteiksmes saņēmēju. To izmanto, lai skaidri norādītu klases locekli vai atsauci uz aktuālo objektu, kad būtu skaidrība (piemēram, ja ir vietējs mainīgais ar to pašu nosaukumu).
super tiek izmantots, lai izsauktu vecāku klases metodes vai piekļūtu īpašībām. To izmanto, kad nepieciešams izmantot vecāku klases realizāciju vietā, kur ir pārrakstīta realizācija pašreizējā klasē.
Piemēri:
class MyClass(val value: Int) {
fun printValue() {
println(this.value) // skaidra `this` izmantošana piekļuvei īpašībai
}
}
open class Parent {
open fun greet() {
println("Sveiciens no vecāka")
}
}
class Child : Parent() {
override fun greet() {
super.greet() // izsauc vecāku klases metodi
println("Sveiciens no bērna")
}
}
Lambda izteiksmēs this var attiekties uz saņēmēju:
fun String.addExclamation(): String {
return this + "!" // `this` attiecas uz virknes saņēmēju
}
fun main() {
val numbers = listOf(1, 2, 3)
val sum = numbers.sum() // `sum` ir paplašināšanas funkcija, `this` attiecas uz sarakstu `numbers`
println(sum)
}
Lai novērstu neskaidrības, ja ir iekšējās klases vai lambda ar saņēmējiem, var izmantot kvalificētu this (piemēram, this@ClassName vai this@label).
class A { // nenoteikts zīmogs @A
inner class B { // nenoteikts zīmogs @B
fun Int.foo() { // nenoteikts zīmogs @foo
val a = this@A // atsauce uz A instanci
val b = this@B // atsauce uz B instanci
val c = this // Int instanci, kas ir `foo` funkcijas saņēmējs
val c1 = this@foo // Int instanci, kas ir `foo` funkcijas saņēmējs
}
}
}