Недавно я попал в буткемп на 6 месяцев, чтобы продолжить свою карьеру, став инженером-программистом (разработка мобильных приложений), если быть точным. Я решил написать короткую статью о том, что такое data class и normal class в Kotlin и о некоторых отличиях.
Что такое класс?
Класс — это план объекта; он разделяет общие свойства и поведение в форме членов и функций-членов.
В Kotlin класс объявляется с ключевым словом class
. Объявление класса состоит из имени класса, заголовка класса (с указанием параметров его типа, основного конструктора и т. д.).
Итак, технически объект является экземпляром класса.
class Person { val name: String = "Dubem" val age: Int = 22 fun info() = "This is $name and my age is $age" } fun main() { val person = Person() println(person) println(person.name) println(person.age) }
В этом примере мы объявляем класс Person, а затем создаем из него объект.
Что такое класс данных?
Класс данных — это простой класс, который используется для хранения данных/состояния и содержит стандартную функциональность. Ключевое слово data используется для объявления класса как класса данных. С помощью классов данных мы можем значительно сократить стандартный код. Компилятор автоматически создает функции equals
, hashCode
, toString
и copy
.
data class User(val name: String, val email: String) fun main() { val u1 = User("Dubem Ezeagwu", "[email protected]") println(u1) println(u1.name) println(u1.email) val (name, email) = u1 println("$name $email") val u2 = User("Dubem Ezeagwu", "[email protected]") println(u1 == u2) // Structural equality println(u1 === u2) // Referential equality }
Различия между классами данных и обычными классами.
- Класс данных должен быть объявлен как минимум с одним первичным параметром конструктора, который должен быть объявлен с помощью val или var. Обычный класс может быть определен как с параметром, так и без него в его конструкторе.
- Классы данных имеют реализации по умолчанию для следующих методов, использующих только свойства, объявленные в основном конструкторе; toString(), hashCode(), copy(), componentN(), equals(). Реализация этих методов может быть написана в обычных классах с использованием свойств, которые были объявлены или не были объявлены в основном конструкторе.
- Класс данных не может быть расширен другим классом. По умолчанию они являются конечными классами. Обычные классы могут быть расширены другими классами, включая классы данных. Однако должны быть соблюдены определенные условия.
- Классы данных не могут быть закрытыми, открытыми, абстрактными или внутренними. Обычные классы могут быть любыми из них.
Итак, у вас есть это! Краткий обзор того, что такое классы и классы данных, и чем они оба отличаются по-своему. Я надеюсь, что смог объяснить эти понятия, и у вас есть базовое понимание. Ваше здоровье!