В JDK-14 была введена новая запись ключевого слова, этот блог является попыткой объяснить использование этого ключевого слова и то, как оно поможет нам, программистам, в некоторых случаях писать код с меньшим количеством стандартного кода.

Вариант использования:

Допустим, нам нужно создать новый неизменяемый класс Java Employee, который может хранить и передавать наши данные. Теперь мы знаем, что в неизменяемом классе поля должны быть окончательными и закрытыми, у него должен быть общедоступный конструктор всех аргументов и должны быть только геттеры, а не сеттеры. Он также должен иметь методы toString(), equals() и hashCode().

С учетом вышеуказанных требований наш код будет выглядеть примерно так:

package org.example;

import java.util.Objects;

public class EmployeeNormal {

    private String name;
    private String lastName;

    public EmployeeNormal(String name, String lastName){
        this.name = name;
        this.lastName = lastName;
    }
    public String getName() {
        return name;
    }
    public String getLastName() {
        return lastName;
    }
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        EmployeeNormal that = (EmployeeNormal) o;
        return Objects.equals(name, that.name) && Objects.equals(lastName, that.lastName);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, lastName);
    }

    @Override
    public String toString() {
        return "EmployeeNormal{" +
                "name='" + name + '\'' +
                ", lastName='" + lastName + '\'' +
                '}';
    }
}

В вышеприведенном примере нам приходится все писать самостоятельно и допустим завтра требование изменится и нам нужно добавить новое поле в класс Employee.

Чтобы добавить новое поле, нам нужно будет добавить это поле, а затем обновить методы toString(), equals() и hashCode(). Этот процесс занимает немного времени и утомительно.

Итак, начиная с JDK-14, в Java появилась запись ключевого слова, с помощью которой мы можем простым способом написать приведенный выше код.

Like an enum, a record is a restricted form of a class. It’s ideal for "plain data carriers," classes that contain data not meant to be altered and only the most fundamental methods such as constructors and accessors.

Приведенный выше пример кода можно записать просто так:

package org.example;

public record EmployeeRecord(String name, String lastName) {

}

Вот и все….!!!!

Нам просто нужно использовать запись ключевого слова, и мы создали наш неизменяемый класс.

Запись получает эти элементы автоматически:

  • Личное поле final для каждого из его компонентов
  • Общедоступный метод доступа чтения для каждого компонента с тем же именем и типом компонента; в этом примере это методы EmployeeRecord::name() и EmployeeRecord::lastName().
  • Открытый конструктор, сигнатура которого получена из списка компонентов записи. Конструктор инициализирует каждое приватное поле из соответствующего аргумента.
  • Реализации методов equals() и hashCode(), которые указывают, что две записи равны, если они относятся к одному типу и их соответствующие компоненты записи равны.
  • Реализация метода toString(), включающая строковое представление всех компонентов записи с их именами.

Код драйвера для приведенного выше примера:

package org.example;

public class Main {
    public static void main(String[] args) {


        EmployeeRecord emp = new EmployeeRecord("Himanshu", "Rai");

        System.out.println(emp.name());
        System.out.println(emp.lastName());
        System.out.println(emp.hashCode());
        System.out.println(emp.toString());
    }
}

Примечание. В отличие от традиционных getters(), в записи getterName не начинается с get и просто похоже на имя поля. Это будет не emp.getName(), а emp.name().

Но есть и некоторые ограничения на запись, а именно:

  • Записи не могут расширять какой-либо класс
  • Записи не могут быть абстрактными; они неявно final
  • Компоненты записи неявно являются окончательными

Это все на сегодня. Спасибо, что прочитали эту статью. Пожалуйста, прокомментируйте любые отзывы и предложения.

Не забудьте похлопать и подписаться, если вам понравилось!!