С DTO мы чаще имеем дело с неизменяемыми данными, а это означает, что после создания объекта мы не можем изменить его содержимое.

Чтобы добиться этого в Java, мы создаем класс с закрытыми, конечными полями и общедоступными методами доступа.

Возьмем, к примеру, класс SpaceShipDTO.

final class SpaceShipDTO {
    final String name;
    final String description;
    final int weapons;

    public SpaceShip(String name, String description, int weapons) {
        this.name = name;
        this.description = description;
        this.weapons = weapons;

    }
    String getName() { return name; }
    double getDescription() { return description; }
    double getWeapons() { return weapons; }

}
Войти в полноэкранный режим

Выйти из полноэкранного режима

Мы можем легко заменить это записью

record SpaceShipDTO(String name, String description, int weapons){ }

Войти в полноэкранный режим

Выйти из полноэкранного режима

Эта запись автоматически создает 3 закрытых конечных поля, общедоступные методы доступа, конструктор и реализации методов equals(), hashCode() и toString(), сгенерированных компилятором Java.