РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1248 of 1310 menu

Ключевое слово data

Ключевое слово data используется для создания класса данных, который автоматически генерирует методы toString, equals, hashCode и copy. Основное предназначение таких классов - хранение данных. Все свойства, объявленные в основном конструкторе, участвуют в генерации этих методов.

Синтаксис

data class ClassName(val property1: Type1, var property2: Type2, ...)

Пример

Создадим простой класс данных для представления пользователя:

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

Пример

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

val user = User("John", 25, "john@example.com") println(user.toString())

Результат выполнения кода:

User(name=John, age=25, email=john@example.com)

Пример

Автоматически генерируются методы equals и hashCode:

val user1 = User("John", 25, "john@example.com") val user2 = User("John", 25, "john@example.com") val user3 = User("Jane", 30, "jane@example.com") println(user1 == user2) println(user1 == user3) println(user1.hashCode() == user2.hashCode())

Результат выполнения кода:

true false true

Пример

Автоматически генерируется функция copy для создания копии объекта с возможностью изменения отдельных свойств:

val original = User("John", 25, "john@example.com") val modified = original.copy(age = 26, email = "john.new@example.com") println(original) println(modified)

Результат выполнения кода:

User(name=John, age=25, email=john@example.com) User(name=John, age=26, email=john.new@example.com)

Пример

Автоматически генерируется функция деструктуризации:

val user = User("John", 25, "john@example.com") val (name, age, email) = user println("Name: $name, Age: $age, Email: $email")

Результат выполнения кода:

Name: John, Age: 25, Email: john@example.com

Пример

Классы данных могут содержать дополнительные методы и свойства, но они не участвуют в генерации стандартных методов:

data class Product(val id: Int, val name: String, val price: Double) { val formattedPrice: String get() = "$${"%.2f".format(price)}" fun applyDiscount(discount: Double): Product { return this.copy(price = price * (1 - discount)) } } val product = Product(1, "Laptop", 999.99) val discounted = product.applyDiscount(0.1) println(product.formattedPrice) println(discounted.formattedPrice)

Результат выполнения кода:

$999.99 $899.99

Ограничения

Классы данных имеют следующие ограничения:

  • Не могут быть abstract, open, sealed или inner
  • Не могут наследоваться от других классов (только от интерфейсов)
  • Должны иметь хотя бы один параметр в основном конструкторе
  • Все параметры основного конструктора должны быть отмечены как val или var

Смотрите также

  • ключевое слово class,
    для объявления обычных классов
  • ключевое слово toString,
    для строкового представления объектов
  • ключевое слово equals,
    для сравнения объектов
  • ключевое слово copy,
    для создания копий объектов
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить