Trong Java, một lớp bất biến (immutable class) là loại lớp mà các đối tượng của nó không thể thay đổi sau khi chúng được tạo. Điều này có nghĩa là sau khi một đối tượng của lớp bất biến được khởi tạo, dữ liệu của đối tượng không thể thay đổi. Lớp String
là một ví dụ điển hình về lớp bất biến trong Java. Dưới đây là cách bạn có thể triển khai một lớp bất biến trong Java:
Sử dụng final class
Khai báo lớp là final
để ngăn lớp được kế thừa, vì lớp con có thể thêm các phương thức thay đổi trạng thái của đối tượng.
public final class ImmutableClass {
// Các trường và phương thức của lớp ở đây
}
Khai báo tất cả các trường là final
Khai báo các trường là final
để đảm bảo chúng chỉ được gán giá trị một lần trong quá trình khởi tạo đối tượng và không thể thay đổi.
private final int value;
Không cung cấp các setter
Bởi vì bạn không muốn cho phép người dùng thay đổi trạng thái của đối tượng sau khi nó được tạo, không cung cấp các phương thức setter.
Đảm bảo rằng lớp chỉ có các phương thức getter cho các trường
Cung cấp các phương thức getter để người dùng có thể đọc giá trị của các trường, nhưng không thể thay đổi chúng.
public int getValue() {
return value;
}
Thực hiện một constructor để khởi tạo tất cả các trường
Constructor sẽ khởi tạo tất cả các trường từ các tham số đầu vào, đảm bảo rằng tất cả các trường final
được thiết lập khi đối tượng được tạo.
public ImmutableClass(int value) {
this.value = value;
}
Đảm bảo tính bất biến cho các trường tham chiếu
Nếu lớp của bạn chứa các trường tham chiếu đến các đối tượng khác, bạn cần đảm bảo rằng các đối tượng này cũng bất biến, hoặc ít nhất bạn cần cung cấp bản sao sâu (deep copy) của chúng khi cần thiết để ngăn chặn việc thay đổi không mong muốn qua các getter.
private final SomeMutableClass reference;
public SomeMutableClass getReference() {
return new SomeMutableClass(reference);
// Hoặc sử dụng một cách để tạo bản sao sâu phù hợp với trường hợp cụ thể
}
Bằng cách tuân theo các bước trên, bạn có thể tạo ra một lớp trong Java mà đối tượng của nó là bất biến. Lớp bất biến là một công cụ hữu ích trong việc phát triển phần mềm, giúp giảm thiểu lỗi và làm cho mã dễ đọc, dễ hiểu hơn.
Comments