Junior
Como funcionam as palavras-chave 'super' e 'this' em Kotlin?
sobes.tech IA
Resposta da IA
this refere-se à instância atual da classe ou ao destinatário de uma expressão lambda. É usado para indicar explicitamente um membro da classe ou uma referência ao objeto atual quando há ambiguidade (por exemplo, quando há uma variável local com o mesmo nome).
super é usado para chamar métodos ou acessar propriedades da classe pai. Aplica-se quando é necessário usar a implementação da classe pai em vez da implementação sobrescrita na classe atual.
Exemplos:
class MyClass(val value: Int) {
fun printValue() {
println(this.value) // Uso explícito de this para acessar a propriedade
}
}
open class Parent {
open fun greet() {
println("Olá do pai")
}
}
class Child : Parent() {
override fun greet() {
super.greet() // Chamada ao método da classe pai
println("Olá do filho")
}
}
Ao usar em funções lambda, this pode referir-se ao receptor da lambda:
fun String.addExclamation(): String {
return this + "!" // this refere-se à string receptora
}
fun main() {
val numbers = listOf(1, 2, 3)
val sum = numbers.sum() // sum é uma função de extensão, this dentro refere-se à lista numbers
println(sum)
}
Para resolver ambiguidades, quando há classes aninhadas ou lambdas com receptores, pode-se usar this@ClassName ou this@label:
class A { // etiqueta implícita @A
inner class B { // etiqueta implícita @B
fun Int.foo() { // etiqueta implícita @foo
val a = this@A // referência à instância de A
val b = this@B // referência à instância de B
val c = this // referência à instância de Int, receptor da função foo
val c1 = this@foo // referência à instância de Int, receptor da função foo
}
}
}