Шаблоны записей Java были представлены в Java 16 как часть Project Amber и улучшены в Java 21 за счет добавления деконструкторов и сопоставления шаблонов. Эта функция обеспечивает более краткий и гибкий способ обработки данных в приложениях Java. В этом уроке мы рассмотрим концепцию шаблонов записей, то, как они помогают в сопоставлении с образцом, а также различные примеры кодирования.
1. Краткий обзор записей Java
Прежде чем углубляться в шаблоны записей, давайте кратко рассмотрим записи Java. Записи были представлены в Java 14 как новый тип класса, специально разработанный для хранения неизменяемых данных. Они устраняют необходимость написания шаблонного кода, предоставляя более краткий синтаксис для определения классов с данными. В следующем примере мы определяем запись с именем «Человек» с тремя полями: имя, фамилия и возраст.
record Person(String firstName, String LastName, int age) {}
Записи, будучи неизменяемыми, ограничивают определенные характеристики:
Записи автоматически генерируют конструктор и методы получения для каждого поля, что делает их более подходящими для носителей данных, чем традиционные классы.
2. Что такое шаблоны записей?
Шаблоны записей, представленные в Java 21, сочетают в себе концепцию шаблонов с записями, что позволяет легко деконструировать и извлекать значения из записей. Шаблон записи состоит из типа класса записи и необязательных переменных шаблона, которым присваиваются значения, извлеченные из целевой записи, только в случае успешного прохождения теста.
Нулевое значение не соответствует ни одному шаблону записи, поэтому переменные шаблона в этом случае инициализироваться не будут.
3. Деструкторы записей
Деструктор является обратным конструктору. Он извлекает значения из объекта, а не добавляет их. В контексте записей деструктор называется «деконструктором». Это позволяет разлагать значения записей на отдельные компоненты. Предположим, у нас есть запись с именем «Имя» со следующими полями:
запись клиента(String firstName, String LastName, int age) {}
Мы можем использовать деконструктор для извлечения значений этих полей из экземпляра записи «Клиент», как показано в следующем примере:
Клиент-клиент = новый клиент("Джейн", "Смит", 30);
if (customer instanceof Customer(String firstName, String LastName, int age)) {
System.out.println("Имя: " firstName); // Джейн
System.out.println("Фамилия: " LastName); // Смит
System.out.println("Возраст: " age); // 30
}
Структуры записей могут быть полезны в ситуациях, когда нам необходимо хранить и извлекать несколько связанных значений как один объект. Функция деконструкции записей позволяет нам легко извлекать и использовать эти значения в нашем коде.
4. Запись шаблонов в операторах Switch
В Java 16 появилось сопоставление шаблонов для операторов экземпляра, которое было расширено в Java 21 за счет включения операторов переключения. Это позволяет создавать более краткий и читаемый код при обработке нескольких шаблонов.
Предположим, у нас есть запись с именем «Счет» с тремя подтипами: «SavingAccount», «CreditCardAccount» и «HomeLoanAccount». Каждый подтип имеет свой способ расчета баланса. Мы можем использовать шаблон записи в операторе переключения для обработки этих трех случаев, как показано ниже:
Аккаунт интерфейса {}
запись SavingAccount (двойной баланс) реализует учетную запись {}
запись CreditCardAccount(двойной кредитный лимит, двойное использование) реализует учетную запись {}
запись HomeLoanAccount(double totalAmount, double sumPaid) реализует учетную запись {}
Учетная запись = новый CreditCardAccount(10000, 1000);
переключатель (форма) {
случай SavingAccount s:
System.out.println("Баланс счета равен " балансу);
перерыв;
случай CreditCardAccount c:
System.out.println("Кредитный баланс: " (creditLimit-used));
перерыв;
дело HomeLoanAccount h:
System.out.println("Баланс " (totalAmount-amountPaid));
перерыв;
по умолчанию:
System.out.println("Неизвестная учетная запись");
}
5. Вложенные шаблоны
Помимо извлечения значений из одной записи, шаблоны записей также можно вкладывать для обработки более сложных записей. Допустим, у нас есть запись с именем «Счет», в которой есть поле типа «Клиент» и еще одно поле типа «Адрес». Мы можем использовать шаблоны вложенных записей для извлечения значений из обоих этих полей, как показано в следующем примере:
запись клиента(String firstName, String LastName, int age) {}
запись учетной записи (клиент клиента, адрес адреса) {}
Клиент-клиент = новый клиент("Джон", "Доу", 25);
Адрес адрес = новый адрес("Мейн-стрит, 123","Город", "Штат");
Аккаунт аккаунта = новый аккаунт(клиент, адрес);
if (экземпляр аккаунта Account(Клиент(fName, lName, возраст), Адрес(улица, город, штат))) {
System.out.println("Имя: " fName); // Джон
System.out.println("Фамилия: " lName); // Доу
System.out.println("Возраст: " age); // 25
System.out.println("Адрес: "улица", "город", "штат); // Мейн-стрит, 123, город, штат
}
В этом примере мы используем два вложенных шаблона для извлечения значений из полей «Клиент» и «Адрес» записи «Счет».
6. Соответствие компонентов
Шаблоны записей обеспечивают большую гибкость, поскольку переменные шаблона не обязательно должны совпадать с именами компонентов записи. Если они совместимы, сопоставление с образцом будет успешным. Например:
запись клиента(String firstName, String LastName, int age) {}
запись учетной записи (клиент клиента, адрес адреса) {}
Клиент-клиент = новый клиент("Джон", "Доу", 25);
if (customer instanceof Customer(var fn, var ln, var age)) {
System.out.println("Имя: " fn); // Джон
System.out.println("Фамилия: " ln); // Доу
System.out.println("Возраст: " age); // 25
}
// Доступ к вложенным компонентам записи
Account account = new Account(customer, new Address("123 Main St", "New York", "NY"));
if (account instanceof Account(var cust, var адрес)) {
System.out.println("Клиент: " cust); // Клиент[firstName=Джон, LastName=Доу, age=25]
System.out.println("Адрес: " адрес); // Адрес[улица=123 Мейн-стрит, город=Нью-Йорк, штат=Нью-Йорк]
}
Здесь переменные шаблона «fn» и «ln» отличаются от соответствующих имен компонентов «fName» и «lName» в записи «Клиент». Это делает шаблоны записей более гибкими и позволяет избежать потенциальных конфликтов с именами переменных.
7. Заключение
В заключение, шаблоны записей Java предоставляют удобный способ деконструировать записи и извлекать из них значения. Они делают код более кратким, чистым и читабельным при обработке сопоставления с образцом в операторах экземпляра и переключателя. Шаблоны записей в сочетании с деструкторами записей позволяют более надежно обрабатывать сложные записи. В целом эта функция расширяет возможности использования записей в качестве носителей данных и делает программирование на Java более приятным.
Разработчики могут узнать больше о возможностях Java 21, пройдя подготовку к экзамену SE 21 Developer Certified Professional с использованием практических тестов MyExamCloud 1Z0-830.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3