Sobes.tech
Junior

Как работят класовете данни в Kotlin?

sobes.tech AI

Отговор от AI

Класовете данни в Kotlin се използват за съхранение на данни. Компилаторът автоматично генерира стандартните методи:

  • equals(): Сравнява екземплярите въз основа на стойностите на техните свойства.
  • hashCode(): Генерира хеш код въз основа на стойностите на свойствата.
  • toString(): Връща низово представяне, което включва имената и стойностите на всички свойства.
  • copy(): Създава копие на обекта, като при необходимост променя стойностите на посочените свойства.
  • componentN(): Методи за деструктуриране (разлагане на обекта на отделни свойства).
// Пример за клас данни
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() и деструктуриране
    val (name, age) = user1
    println("Име: $name, Възраст: $age") // Име: Alice, Възраст: 30
}

Ключови моменти:

  • Всички свойства, дефинирани в основния конструктор, трябва да бъдат val или var.
  • Класът данни не може да бъде abstract, open, sealed или inner.
  • Класовете данни могат да наследяват други класове или да реализират интерфейси.
  • Свойствата, обявени извън основния конструктор, не участват в генерирането на стандартните методи.
Метод Описание
equals() Сравнява свойствата на основния конструктор.
hashCode() Генерира хеш въз основа на свойствата на основния конструктор.
toString() Показва низово представяне на свойствата на основния конструктор.
copy() Създава повърхностна копие с възможност за промяна на свойствата.
componentN() Достъп до свойствата в реда на тяхното обявяване в конструктора.

Класовете данни значително опростяват работата с POJO (Plain Old Java Object) или DTO (Data Transfer Object), като намаляват шаблонния код.