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: $name, Age: $age") // Name: Alice, Age: 30
}

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

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

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