Kotlin
Легкий
Что такое data class? Как работает метод copy()?
Data Class в Kotlin
Определение:
data class User(
val name: String,
val age: Int,
val email: String = ""
)
Что генерируется автоматически:
- equals() — сравнение по всем свойствам
- hashCode() — хеш на основе свойств
- toString() — "User(name=Alice, age=30, email=)"
- copy() — копирование с изменениями
- 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 — невидимый ИИ-помощник для технических интервью
Попробовать бесплатно