Java Records
Java Records được giới thiệu trong Java 14 và được thêm chính thức trong Java 16.
Tuy nhiên, nhiều developer vẫn chưa tận dụng hết tiềm năng của Java Record. Chính vì lẽ đó, bài viết này ra đời nhằm mục đích giới thiệu về những sức mạnh mà Records có thể mang lại.
Bắt đầu thôi :v
1. Java Record là gì?
Thông thường một class truyền thống trong Java sẽ tương tự thế này:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class StudentDetails {
private final String name;
private final int studentNumber;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
StudentDetails that = (StudentDetails) o;
return studentNumber == that.studentNumber && Objects.equals(name, that.name);
}
@Override
public int hashCode() {
return Objects.hash(name, studentNumber);
}
@Override
public String toString() {
return "StudentDetails{" +
"name='" + name + '\'' +
", studentNumber=" + studentNumber +
'}';
}
}
Class StudentDetails đơn giản với hai trường: name
và studentNumber
. Các trường này là private
và final
, nghĩa là chúng không thể thay đổi sau khi đối tượng được tạo.
Để quản lý các trường này, cần một constructor
, các method getter/setter
, một method equals
, một method hashCode
và một method toString
. Điều này tạo ra gần 50 dòng mã (nếu không sử dụng lombok), cho thấy các class Java trước khi Records
ra đời sẽ trông dài dòng như thế nào :)).
Để tạo một đối tượng student
từ class StudentDetails
, làm đơn giản như như cái thuở mới bập boẹ học Java thôi:
1
2
3
4
5
public class Main {
public static void main(String[] args) {
StudentDetails student = new StudentDetails("TungDaDev" , 6789);
}
}
Nhưng nếu code với Record
thì sao nhỉ? Hãy xem cách triển khai được đơn giản hóa ra làm sao nè:
1
2
3
4
5
6
7
8
public record StudentRecord(String name, int studentNumber) {
}
public class Main {
public static void main(String[] args) {
StudentRecord student = new StudentRecord("TungDaDEv" , 6789);
}
}
Với Record
, chương trình được giảm thiểu tối đa số dòng code, trông ngắn gọn, dễ hiểu và dễ đọc hơn rất nhiều.
2. Ưu điểm của Java Record và những thứ có thể làm với nó
-
Giảm boilerplate code: Java Records tự động tạo các phương thức cần thiết như
equals()
,hashCode()
vàtoString()
. -
Tính bất biến (Immutability): Theo mặc định, tất cả các trường trong một Records đều là
private
vàfinal
, đảm bảo tính bất biến. - Custom constructors: Records cung cấp một
constructor
chuẩn mặc định, nhưng có thểoverride
nó.1 2 3 4 5 6 7
public record StudentRecord(String name, int studentNumber) { public StudentRecord (String name , int studentNumber){ if (studentNumber <= 0) { throw new IllegalArgumentException("Student number must be positive."); } } }
- Records còn hỗ trợ hàm tạo nhỏ gọn, chỉ khả dụng cho các class Records.
1 2 3 4 5 6 7 8
//compact contructor public record StudentRecord(String name, int studentNumber) { public StudentRecord { if (studentNumber <= 0) { throw new IllegalArgumentException("Student number must be positive."); } } }
- Interface Implementaton: Records có thể
implements
các Interface khác.1 2
public record StudentRecord(String name, int studentNumber) implements School { }
- Custom methods: Records cho phép định nghĩa thêm các method public.
1 2 3 4 5
public record StudentRecord(String name, int studentNumber) { public String name() { return name; } }
- Records có thể chứa các method và field static.
- Records có thể khai báo theo kiểu generic.
1 2
public record Student<T>(String name, T studentNumber) { }
3. Vậy không làm gì được với Java records?
- Define private instance fields: Tất cả các trường trong một Record đều ngầm định là
private
vàfinal
. - Inherit record classes: Record không thể extends các class khác.
Lời kết
Nhiều developer vẫn chưa quen với các tính năng mới này, nhưng việc tích hợp Java Records
vào các dự án có thể dẫn đến mã sạch hơn, dễ bảo trì hơn.
Hãy thử Java Records và xem tốc độ code sẽ được tăng tốc như thế nào :D
Bài viết mang tính chất “ghi chú, lưu trữ, chia sẻ và phi lợi nhuận”.
Nếu bạn thấy hữu ích, đừng quên chia sẻ với bạn bè và đồng nghiệp của mình nhé!
Happy coding! 😎 👍🏻 🚀 🔥