Junior
Какво е особеното на Data Class в сравнение с други класове в Kotlin?
sobes.tech AI
Отговор от AI
Характеристики на 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
}