ENIGMA AI
ENIGMA AI
Kotlin Легкий

Что такое data class? Как работает метод copy()?

Data Class в Kotlin

Определение:

data class User(
    val name: String,
    val age: Int,
    val email: String = ""
)

Что генерируется автоматически:

  1. equals() — сравнение по всем свойствам
  2. hashCode() — хеш на основе свойств
  3. toString() — "User(name=Alice, age=30, email=)"
  4. copy() — копирование с изменениями
  5. componentN() — для деструктуризации

copy()

Создаёт копию с возможностью изменить отдельные поля:

val user = User("Alice", 30, "alice@mail.com")

// Копия с изменённым возрастом
val olderUser = user.copy(age = 31)
// User(name=Alice, age=31, email=alice@mail.com)

// Копия с несколькими изменениями
val newUser = user.copy(name = "Bob", age = 25)
// User(name=Bob, age=25, email=alice@mail.com)

// Полная копия
val clone = user.copy()

Shallow Copy:

data class Order(
    val id: Int,
    val items: MutableList<String>  // Мутабельный список
)

val order1 = Order(1, mutableListOf("Apple", "Banana"))
val order2 = order1.copy()

order2.items.add("Orange")
println(order1.items)  // [Apple, Banana, Orange] — изменился!

// copy() копирует ссылку, не содержимое

Деструктуризация:

val (name, age, email) = user
println(name)  // Alice

// В циклах
for ((name, age) in listOf(user)) {
    println("$name is $age")
}

Требования к data class:

  • Минимум один параметр в конструкторе
  • Все параметры должны быть val или var
  • Не может быть abstract, open, sealed, inner

Когда использовать:

  • DTO (Data Transfer Objects)
  • Модели данных
  • Состояния в MVI/Redux
  • Value objects

Похожие вопросы

Готовитесь к собеседованию?

ENIGMA AI — невидимый ИИ-помощник для технических интервью

Попробовать бесплатно
Все вопросы