Карта сайта — Медицинский центр «Доверие» г. Боровичи
|
|
Документация JDK 20 — Главная
- Главная
- Java SE
- 20
Обзор
- Прочтите меня
- Примечания к выпуску
- Что нового
- Руководство по миграции
Загрузить JDK- Руководство по установке
- Формат строки версии
Инструменты
- Технические характеристики инструментов JDK
- Руководство пользователя JShell
- Руководство по JavaDoc
- Руководство пользователя средства упаковки
Язык и библиотеки
- Обновления языка
- Основные библиотеки
- HTTP-клиент JDK
- Учебники по Java
- Модульный JDK
- Руководство программиста API бортового регистратора
- Руководство по интернационализации
Технические характеристики
- Документация API
- Язык и ВМ
- Имена стандартных алгоритмов безопасности Java
- банок
- Собственный интерфейс Java (JNI)
- Инструментальный интерфейс JVM (JVM TI)
- Сериализация
- Проводной протокол отладки Java (JDWP)
- Спецификация комментариев к документации для стандартного доклета
- Прочие характеристики
Безопасность
- Руководство по безопасному кодированию
- Руководство по безопасности
Виртуальная машина HotSpot
- Руководство по виртуальной машине Java
- Настройка сборки мусора
Управление и устранение неполадок
- Руководство по устранению неполадок
- Руководство по мониторингу и управлению
- Руководство по JMX
Client Technologies
- Руководство по специальным возможностям Java
Классы данных | Документация Kotlin
Нередко создаются классы, основной целью которых является хранение данных. В таких классах некоторые стандартные функции и некоторые полезные функции часто механически выводятся из данных. В Kotlin они называются классами данных и отмечены цифрой 9.0121 data :
data class User(val name: String, val age: Int)
Компилятор автоматически извлекает следующие элементы из всех свойств, объявленных в первичном конструкторе:
equals()
/hashCode ()
параtoString()
вида"User(name=John, age=42)"
componentN()
функции, соответствующие свойствам в порядке их объявления.функция copy()
(см. ниже).
Для обеспечения согласованности и осмысленного поведения сгенерированного кода классы данных должны удовлетворять следующим требованиям:
Первичный конструктор должен иметь хотя бы один параметр.
Все параметры основного конструктора должны быть помечены как
val
илиvar
.Классы данных не могут быть абстрактными, открытыми, закрытыми или внутренними.
Кроме того, генерация членов класса данных следует следующим правилам в отношении наследования членов: в теле класса данных или final
реализации в суперклассе, то эти функции не генерируются, а используются существующие реализации.
Если супертип имеет компонентN()
, которые являются , открывают
и возвращают совместимые типы, соответствующие функции генерируются для класса данных и переопределяют функции супертипа. Если функции супертипа не могут быть переопределены из-за несовместимости сигнатур или из-за того, что они являются окончательными, сообщается об ошибке.
Предоставление явных реализаций функций componentN()
и copy()
не допускается.
Классы данных могут расширять другие классы (примеры см. в разделе Запечатанные классы).
В JVM, если сгенерированный класс должен иметь конструктор без параметров, необходимо указать значения по умолчанию для свойств (см. Конструкторы).
класс данных User(val name: String = «», val age: Int = 0)
Свойства, объявленные в теле класса
Компилятор использует только свойства, определенные внутри основного конструктора для автоматически генерируемых функций. Чтобы исключить свойство из сгенерированных реализаций, объявите его внутри тела класса:
класс данных Person (val name: String) { переменный возраст: Int = 0 }
В реализациях toString()
, equals()
, hashCode()
и copy()
будет использоваться только свойство name
, и будет только одна функция компонента component1 ()
. Хотя два объекта Person
могут иметь разный возраст, они будут рассматриваться как равные.
класс данных Person (val name: String) { переменный возраст: Int = 0 } веселая главная () { // начало выборки val person1 = Человек(«Джон») val person2 = Человек(«Джон») человек1. возраст = 10 человек2.возраст = 20 //конец выборки println(«человек1 == человек2: ${человек1 == человек2}») println(«person1 с возрастом ${person1.age}: ${person1}») println(«person2 с возрастом ${person2.age}: ${person2}») }
Копирование
Используйте функцию copy()
для копирования объекта, что позволяет изменять некоторые его свойств, сохраняя при этом остальные без изменений. Реализация этой функции для класса User
выше будет следующей:
fun copy(name: String = this.name, age: Int = this.age) = User(name, age)
Затем вы можете напишите следующее:
val jack = User(name = «Jack», age = 1) val oldJack = jack.copy(age = 2)
Классы данных и объявления деструктурирования
Функции компонентов , сгенерированные для классов данных, позволяют использовать их в объявлениях деструктурирования:
val jane = User(«Jane», 35) Вэл (имя, возраст) = Джейн println(«$name, $age years of age») // печатает «Джейн, 35 лет»
Стандартные классы данных
Стандартная библиотека предоставляет классы Pair
и Triple
.