Junior
Was ist das Besondere an der Data Class im Vergleich zu anderen Klassen in Kotlin?
sobes.tech KI
Antwort von AI
Eigenschaften der Data Class in Kotlin:
- Automatische Generierung der Funktionen
equals(),hashCode(),toString(),copy()undcomponentN(). - Erfordern mindestens einen Parameter im Konstruktor.
- Alle Parameter des Konstruktors müssen als
valodervardeklariert werden. - Hauptsächlich für die Speicherung von Daten gedacht.
Beispiel:
// Normale Klasse
class User(val name: String, val age: Int)
// Data Class
data class DataUser(val name: String, val age: Int)
fun main() {
val user1 = User("Alice", 30)
val user2 = User("Alice", 30)
println(user1 == user2) // false (vergleicht Referenzen standardmäßig)
println(user1.toString()) // Zeigt etwas wie User@Hashcode
val dataUser1 = DataUser("Alice", 30)
val dataUser2 = DataUser("Alice", 30)
println(dataUser1 == dataUser2) // true (vergleicht Daten)
println(dataUser1.toString()) // Zeigt DataUser(name=Alice, age=30)
}
Unterschiede bei den generierten Funktionen:
| Funktion | Normale Klasse | Data Class |
|---|---|---|
equals() |
Referenzvergleich | Vergleich der Daten nach Feldern |
hashCode() |
Abhängig von der Implementierung | Abhängig von den Daten nach Feldern |
toString() |
Klassenname und Hash | Klassenname und Feldwerte |
copy() |
Nein (manuelle Implementierung erforderlich) | Ja (erlaubt einfache Kopien) |
componentN() |
Nein | Ja (ermöglicht Destrukturierung) |
Verwendung von componentN():
// Definition einer Data Class
data class Point(val x: Int, val y: Int)
fun main() {
val p = Point(10, 20)
val (x, y) = p // Destrukturierung mit component1(), component2()
println("x: $x, y: $y") // Zeigt x: 10, y: 20
}