Data-класс
В Data классе переопределяется:
- toString
- equals
- hashCode
- Переопределены деструктивные операторы (component1(), component2()...)
- Переопределен метод copy()
Можно использовать деструктор.
Если не укажем, что это дата класс, то деструктор не получится вызвать, т.к. необходимо чтобы в классе были переопределены методы "component 1" 2 и т.д. Их может быть сколько угодно. И в принципе можем переопределить сами.
class Student(val name: String, val lastName: String, val id: String) { operator fun component1() = name operator fun component2() = lastName operator fun component3() = id }
operator означает, что это не наша функция, а функция, которая нужна для деструктора.
Деструктор
Есть класс с параметрами. Вызываем объект.
val student1 = Student("Kolya", "Tarasov", "1034")
Можем вызвать деструктор
val (name, lastName, id) = student1 println(name)
Если переменная не нужна - подчеркивание
val (name, _, id) = student1 println(name)
Copy
Если это дата класс, то у объекта такие же параметры как и у копируемого объекта, но при этом они ссылаются на разные объекты.
val student3 = student1.copy()
Можем поменять какое-то одно значение:
val student3 = student1.copy(id = "999")