Junior
Wie funktionieren Datenklassen in Kotlin?
sobes.tech KI
Antwort von AI
Datenklassen in Kotlin werden zum Speichern von Daten verwendet. Der Compiler generiert automatisch die Standardmethoden:
equals(): Vergleicht Instanzen basierend auf den Werten ihrer Eigenschaften.hashCode(): Generiert einen Hash-Code basierend auf den Werten der Eigenschaften.toString(): Gibt eine String-Darstellung zurück, die die Namen und Werte aller Eigenschaften enthält.copy(): Erstellt eine Kopie des Objekts, wobei die Werte der angegebenen Eigenschaften bei Bedarf geändert werden.componentN(): Methoden für die Destrukturierung (Auflösung des Objekts in einzelne Eigenschaften).
// Beispiel einer Datenklasse
data class User(val name: String, val age: Int)
fun main() {
val user1 = User("Alice", 30)
val user2 = User("Alice", 30)
val user3 = User("Bob", 25)
// equals()
println(user1 == user2) // true
println(user1 == user3) // false
// toString()
println(user1.toString()) // User(name=Alice, age=30)
// copy()
val user4 = user1.copy(age = 31)
println(user4) // User(name=Alice, age=31)
// componentN() und Destrukturierung
val (name, age) = user1
println("Name: $name, Alter: $age") // Name: Alice, Alter: 30
}
Wichtige Punkte:
- Alle im primären Konstruktor definierten Eigenschaften müssen
valodervarsein. - Eine Datenklasse kann nicht
abstract,open,sealedoderinnersein. - Datenklassen können von anderen Klassen erben oder Schnittstellen implementieren.
- Eigenschaften, die außerhalb des primären Konstruktors deklariert sind, nehmen nicht an der Generierung der Standardmethoden teil.
| Methode | Beschreibung |
|---|---|
equals() |
Vergleicht die Eigenschaften des primären Konstruktors. |
hashCode() |
Generiert einen Hash basierend auf den Eigenschaften des primären Konstruktors. |
toString() |
Gibt eine String-Darstellung der Eigenschaften des primären Konstruktors aus. |
copy() |
Erstellt eine flache Kopie mit der Möglichkeit, Eigenschaften zu ändern. |
componentN() |
Zugriff auf Eigenschaften in der Reihenfolge ihrer Deklaration im Konstruktor. |
Datenklassen vereinfachen die Arbeit mit POJO (Plain Old Java Object) oder DTO (Data Transfer Object) erheblich, indem sie Boilerplate-Code reduzieren.