Sobes.tech
Junior

Kako funkcionišu data klase u Kotlinu?

sobes.tech АИ

Одговор од АИ

Data klase u Kotlinu se koriste za skladištenje podataka. Kompajler automatski generiše standardne metode:

  • equals(): Upoređuje instance na osnovu vrednosti njihovih svojstava.
  • hashCode(): Generiše hash kod na osnovu vrednosti svojstava.
  • toString(): Vraća string reprezentaciju koja uključuje imena i vrednosti svih svojstava.
  • copy(): Kreira kopiju objekta, menjaći ako je potrebno vrednosti navedenih svojstava.
  • componentN(): Metode za destrukturiranje (raspad objekta na pojedina svojstva).
// Primer data klase
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() i destrukturiranje
    val (name, age) = user1
    println("Ime: $name, Godine: $age") // Ime: Alice, Godine: 30
}

Ključne tačke:

  • Sve osobine definisane u glavnom konstruktoru moraju biti val ili var.
  • Data klasa ne može biti abstract, open, sealed ili inner.
  • Data klase mogu naslediti druge klase ili implementirati interfejse.
  • Osobine deklarisane van glavnog konstruktora ne učestvuju u generisanju standardnih metoda.
Metoda Opis
equals() Upoređuje osobine glavnog konstruktora.
hashCode() Generiše hash na osnovu osobina glavnog konstruktora.
toString() Prikazuje string reprezentaciju osobina glavnog konstruktora.
copy() Kreira površinsku kopiju sa mogućnošću izmene osobina.
componentN() Pristup osobinama u redosledu njihove deklaracije u konstruktoru.

Data klase znatno pojednostavljuju rad sa POJO (Plain Old Java Object) ili DTO (Data Transfer Object), smanjujući količinu boilerplate koda.