5 cách đảm bảo tính bất biến trong Java
Tính không thay đổi là rất mong muốn trong lập trình. Nó cho phép hành vi của các đối tượng có thể đoán trước, nhất quán và an toàn, giúp dễ dàng suy luận về mã hơn, cải thiện hiệu suất và đảm bảo rằng mã mạnh mẽ hơn và ít bị lỗi hơn. Dựa trên kinh nghiệm của tôi, đây là 5 cách bạn có thể kết hợp tính bất biến trong cơ sở mã của mình —
1. Các trường cuối cùng
Một trong những cách đơn giản nhất để đạt được tính bất biến trong Java là sử dụng các trường cuối cùng . Trường cuối cùng chỉ có thể được gán giá trị một lần, trong hàm tạo hoặc trong quá trình khởi tạo đối tượng. Đây là một ví dụ:
public final class Person {
private final String firstName;
private final String lastName;
public Person(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
}
Một trong những thư viện phổ biến nhất để tạo các đối tượng bất biến trong Java là thư viện Bất biến của Google Guava . Nó cho phép bạn tạo các đối tượng bất biến theo cách đơn giản và nhất quán, đồng thời nó cũng hỗ trợ các tính năng nâng cao hơn như bộ sưu tập và xác thực tùy chỉnh. Đây là một ví dụ:
@Value.Immutable
public interface Person {
String firstName();
String lastName();
}
Sử dụng @NonNull, @Nullable hoặc các chú thích cấp loại khác. Để ngăn các giá trị null trong các trường của các đối tượng bất biến và để làm cho nó rõ ràng, nên sử dụng các chú thích cấp loại như @NonNull, @Nullable hoặc các chú thích khác để chỉ định tính vô hiệu của các trường. Điều này có thể giúp bắt lỗi sớm và làm cho mã dễ đọc hơn. Đây là một ví dụ:
public final class Person {
private final @NonNull String firstName;
private final @NonNull String lastName;
public Person(@NonNull String firstName, @NonNull String lastName) {
this.firstName = firstName;
this.lastName
}
}
Sử dụng một lớp trình tạo để tạo các đối tượng bất biến là một kỹ thuật mạnh mẽ cho phép bạn tạo các đối tượng bất biến phức tạp với giao diện đơn giản, nhất quán. Lớp trình tạo có thể được sử dụng để đặt giá trị cho các thuộc tính của đối tượng và sau đó một phương thức xây dựng được gọi để tạo đối tượng bất biến với các thuộc tính đã đặt. Điều này cho phép bạn tạo các đối tượng bất biến với nhiều trường tùy chọn và đảm bảo rằng các đối tượng được tạo theo cách nhất quán.
@Value.Immutable
public interface Person {
String firstName();
String lastName();
int age();
String address();
@Value.Builder
interface Builder {
Builder firstName(String firstName);
Builder lastName(String lastName);
Builder age(int age);
Builder address(String address);
Person build();
}
}
Một trong những cách tốt nhất để đảm bảo tính bất biến là sử dụng các đối tượng giá trị. Đối tượng giá trị là những đối tượng nhỏ, không thay đổi, đại diện cho một giá trị, chẳng hạn như địa chỉ email hoặc ngày tháng. Chúng thường được sử dụng để đóng gói logic xác thực và chúng có thể được sử dụng thay vì nguyên hàm để làm rõ loại dữ liệu mà một biến đại diện. Đây là một ví dụ:
public final class Email {
private final String email;
public Email(String email) {
if (!email.matches("^[a-zA-Z0-9_!#$%&’*+/=?`{|}~^.-]+@[a-zA-Z0-9.-]+$")) {
throw new IllegalArgumentException("Invalid email address");
}
this.email = email;
}
public String getEmail() {
return email;
}
}
Để nâng các kỹ năng phát triển Java của bạn lên một tầm cao mới, hãy nhớ kiểm tra và làm theo Java hiệu quả !

![Dù sao thì một danh sách được liên kết là gì? [Phần 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































