Sobes.tech
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 val oder var sein.
  • Eine Datenklasse kann nicht abstract, open, sealed oder inner sein.
  • 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.