← Tất cả bài viết

Record trong Java: khi nào nên dùng và khi nào không

22/07/2026

Từ Java 16, record là cách khai báo lớp dữ liệu bất biến (immutable) cực ngắn gọn. Nhưng nó không phải viên đạn bạc thay thế mọi class.

Record cho bạn những gì

Chỉ một dòng, compiler tự sinh: field private final, constructor, getter (theo tên field), equals, hashCodetoString dựa trên toàn bộ component.

public record Point(int x, int y) {}
// tương đương ~50 dòng class truyền thống

var p = new Point(1, 2);
p.x();               // 1
p.equals(new Point(1,2)); // true

Hợp dùng khi nào

  • DTO truyền dữ liệu API (request/response)
  • Value object bất biến: toạ độ, khoảng tiền, cặp key-value
  • Kết quả trả về nhiều giá trị thay vì tạo class tạm
  • Kết hợp pattern matching và sealed interface

KHÔNG hợp khi nào

  • JPA Entity: record bất biến, không có constructor rỗng — xung khắc với yêu cầu của Hibernate
  • Đối tượng cần thay đổi trạng thái sau khi tạo (mutable)
  • Class cần kế thừa — record không được extends class khác

Tóm lại: record toả sáng ở vai trò 'túi dữ liệu' bất biến. Với đối tượng có vòng đời và trạng thái phức tạp, class thường vẫn đúng hơn.

👉 Dùng thử công cụ liên quan trên dev-hub: JSON Formatter — chạy hoàn toàn trong trình duyệt, không gửi dữ liệu lên server.