Например, для DTO часто создают обычный класс:
public class UserDto {
private final Long id;
private final String name;
private final String email;
public UserDto(Long id, String name, String email) {
this.id = id;
this.name = name;
this.email = email;
}
public Long getId() {
return id;
}
public String getName() {
return name;
}
public String getEmail() {
return email;
}
}Но если объект нужен просто для хранения данных, можно использовать record:
public record UserDto(
Long id,
String name,
String email
) {}
Java сама создаст конструктор, методы доступа, equals(), hashCode() и toString().
Обращение к полям выглядит немного иначе:
user.name()
user.email()
record хорошо подходит для DTO, ответов API, событий, команд, настроек и небольших неизменяемых объектов.
Например, можно удобно вернуть данные из REST-контроллера:
return new UserDto(1L, "Alex", "alex@mail.com");
Важно помнить: record по смыслу должен быть простым носителем данных. Если внутри начинает появляться много бизнес-логики, сложных состояний и изменяемых полей, лучше подумать об обычном классе.
Так код становится короче, понятнее и меньше засоряется шаблонными методами.
👉 Java Ready | #совет
