Sobes.tech
Junior

Koja je osobina Data Class u poređenju sa drugim klasama u Kotlinu?

sobes.tech АИ

Одговор од АИ

Особености на Data Class в Kotlin:

  • Автоматично генериране на функции equals(), hashCode(), toString(), copy() и componentN().
  • Изискват поне един параметър в конструктора.
  • Всички параметри на конструктора трябва да бъдат обявени като val или var.
  • Предназначени са главно за съхранение на данни.

Пример:

// Обикновен клас
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 (по подразбиране сравнява референци)
    println(user1.toString()) // Ще изведе нещо като User@hashcode

    val dataUser1 = DataUser("Alice", 30)
    val dataUser2 = DataUser("Alice", 30)
    println(dataUser1 == dataUser2) // true (сравнява данните)
    println(dataUser1.toString()) // Ще изведе DataUser(name=Alice, age=30)
}

Разлики в генерираните функции:

Функция Обикновен клас Data Class
equals() Сравняване на референции Сравняване на данни по полета
hashCode() Зависим от реализацията Зависим от данните по полета
toString() Име на класа и хеш код Име на класа и стойности на полетата
copy() Не (нужна е ръчна реализация) Да (лесно създаване на копия)
componentN() Не Да (позволява деструктуриране на обекта)

Използване на componentN():

// Дефиниране на Data Class
data class Point(val x: Int, val y: Int)

fun main() {
    val p = Point(10, 20)
    val (x, y) = p // Деструктуриране с component1(), component2()
    println("x: $x, y: $y") // Ще изведе x: 10, y: 20
}