Πώς λειτουργούν οι λέξεις-κλειδιά 'super' και 'this' στο Kotlin;
sobes.tech AI
Απάντηση από AI
Το this αναφέρεται στο τρέχον στιγμιότυπο της κλάσης ή στον παραλήπτη μιας έκφρασης lambda. Χρησιμοποιείται για να δηλώσει ρητά ένα μέλος της κλάσης ή μια αναφορά στο τρέχον αντικείμενο όταν υπάρχει ασάφεια (π.χ., όταν μια τοπική μεταβλητή έχει το ίδιο όνομα).
Το super χρησιμοποιείται για να καλέσει μεθόδους ή να αποκτήσει πρόσβαση σε ιδιότητες της γονικής κλάσης. Εφαρμόζεται όταν χρειάζεται να χρησιμοποιήσετε την υλοποίηση της γονικής κλάσης αντί για την υπερκαθορισμένη υλοποίηση στην τρέχουσα κλάση.
Παραδείγματα:
class MyClass(val value: Int) {
fun printValue() {
println(this.value) // Ρητή χρήση του this για πρόσβαση στην ιδιότητα
}
}
open class Parent {
open fun greet() {
println("Γειά από τον γονέα")
}
}
class Child : Parent() {
override fun greet() {
super.greet() // Κλήση της μεθόδου της γονικής κλάσης
println("Γειά από το παιδί")
}
}
Όταν χρησιμοποιείται σε συναρτήσεις lambda, το this μπορεί να αναφέρεται στον παραλήπτη της lambda:
fun String.addExclamation(): String {
return this + "!" // this αναφέρεται στη συμβολοσειρά παραλήπτη
}
fun main() {
val numbers = listOf(1, 2, 3)
val sum = numbers.sum() // sum είναι μια επέκταση συνάρτησης, το this μέσα αναφέρεται στη λίστα numbers
println(sum)
}
Για την επίλυση ασάφειας, όταν έχετε εσωτερικές κλάσεις ή lambdas με παραλήπτες, μπορείτε να χρησιμοποιήσετε τον εξειδικευμένο this (this@ClassName ή this@label):
class A { // αυθαίρετη ετικέτα @A
inner class B { // αυθαίρετη ετικέτα @B
fun Int.foo() { // αυθαίρετη ετικέτα @foo
val a = this@A // αναφορά σε μια παρουσίαση A
val b = this@B // αναφορά σε μια παρουσίαση B
val c = this // αναφορά στην παρουσίαση Int, παραλήπτης της συνάρτησης foo
val c1 = this@foo // αναφορά στην παρουσίαση Int, παραλήπτης της συνάρτησης foo
}
}
}