Junior
Come funzionano le parole chiave 'super' e 'this' in Kotlin?
sobes.tech AI
Risposta dell'AI
this si riferisce all'istanza corrente della classe o al destinatario di un'espressione lambda. Viene utilizzato per indicare esplicitamente un membro della classe o un riferimento all'oggetto corrente quando c'è ambiguità (ad esempio, quando una variabile locale ha lo stesso nome).
super viene usato per chiamare metodi o accedere a proprietà della classe genitore. Si applica quando si desidera usare l'implementazione della classe genitore invece di quella sovrascritta nella classe corrente.
Esempi:
class MyClass(val value: Int) {
fun printValue() {
println(this.value) // Uso esplicito di this per accedere alla proprietà
}
}
open class Parent {
open fun greet() {
println("Ciao dal genitore")
}
}
class Child : Parent() {
override fun greet() {
super.greet() // Chiamata al metodo della classe genitore
println("Ciao dal figlio")
}
}
Quando usato in funzioni lambda, this può riferirsi al ricevitore della lambda:
fun String.addExclamation(): String {
return this + "!" // this si riferisce alla stringa ricevente
}
fun main() {
val numbers = listOf(1, 2, 3)
val sum = numbers.sum() // sum è una funzione di estensione, this all'interno si riferisce alla lista numbers
println(sum)
}
Per risolvere ambiguità, quando si hanno classi annidate o lambda con riceventi, si può usare this@ClassName o this@label:
class A { // etichetta implicita @A
inner class B { // etichetta implicita @B
fun Int.foo() { // etichetta implicita @foo
val a = this@A // riferimento all'istanza di A
val b = this@B // riferimento all'istanza di B
val c = this // riferimento all'istanza di Int, ricevente della funzione foo
val c1 = this@foo // riferimento all'istanza di Int, ricevente della funzione foo
}
}
}