Nguyên tắc tạo lớp bất biến
Nguyên tắc 1: Don’t provide “setter” methods
Không cung cấp phương thức setter, phương thức làm thay đổi giá trị của trường hoặc đối tượng được các trường tham chiếu.
Nguyên tắc này chỉ rõ việc các trường của đối tượng là có thể sửa đổi và phương thức setter thực thi việc thay đổi đó, để đảm bảo quy tắc thì ta không cung cấp phương thức này ra bên ngoài.
Nguyên tắc 2: Make all fields final
and private
Đặt các trường khai báo thành private, thì bên ngoài không thể truy cập vào được, tuy nhiên muốn không vô tình sửa đổi trường thì ta nên đặt thành final.
Nguyên tắc 3: Don’t allow subclasses to override methods
Không cho phép các lớp con ghi đè lại, cách đơn giản nhất là khai báo final ở trên lớp, lúc này lớp được khai báo final sẽ không thể được kế thừa.
Nguyên tắc 4: If the instance fields include references to mutable objects, don’t allow those objects to be changed
Trong danh sách trường của đối tượng có những trường chứa tham chiếu đến “đối tượng có thể thay đổi” thì ta không được phép thay đổi các đối tượng đó
- không cung cấp các phương thức để sửa đổi đối tượng đó
- không dùng chung tham chiếu với các đối tượng có thể thay đổi, tạo ra bản sao mới với giá trị đã được sao chép đối với các đối tượng này (là những đối tượng là trường của lớp)
Ví dụ về lớp bất biến
public final class ImmutableRGB {
// Values must be between 0 and 255.
final private int red;
final private int green;
final private int blue;
final private String name;
private void check(int red,
int green,
int blue) {
if (red < 0 || red > 255
|| green < 0 || green > 255
|| blue < 0 || blue > 255) {
throw new IllegalArgumentException();
}
}
public ImmutableRGB(int red,
int green,
int blue,
String name) {
check(red, green, blue);
this.red = red;
this.green = green;
this.blue = blue;
this.name = name;
}
public int getRGB() {
return ((red << 16) | (green << 8) | blue);
}
public String getName() {
return name;
}
public ImmutableRGB invert() {
return new ImmutableRGB(255 - red,
255 - green,
255 - blue,
"Inverse of " + name);
}
}
Các lớp bất biến trong java
Ngoài những lớp bất biến chúng ta có thể tự khởi tạo thì trong java có sẵn một số lớp bất biến
- String
- Wrapper classes such as Integer, Long, Double etc.
- Các lớp tập hợp bất biến như Collections.singletonMap(),….
- java.lang.StackTraceElement
- Java enums
- java.util.Locale
- java.util.UUID
Xem thêm các bài viết liên quan dưới đây:
- Bộ nhớ Heap và bộ nhớ Stack trong Java
- Quy ước đặt tên trong Java (Naming convention)
- Pass by value, Pass by reference trong java
- Từ khóa trong java và chức năng của nó (keywords)
- Kiểu dữ liệu trong java và tác dụng của nó
- Improve Java Performance: thủ thuật tối ưu [Phần 1]
- Autoboxing and Unboxing trong Java thực hiện ra sao?
- Equals and Hashcode trong ngôn ngữ Java
- Crack Intellij IDEA Ultimate version 2022
- Distributed Lock with Hazelcast and Spring
- How to build Rate Limit with Hazelcast and Spring Boot
- Biết sử dụng git cherry-pick để làm việc hiệu quả hơn
- Git revert với Git reset hoạt động như thế nào?
- Git stash giúp bạn trở nên chuyên nghiệp như thế nào
- Câu chuyện phỏng vấn online mùa Covid
- Series tìm hiểu System Design
- Series tìm hiểu Hazelcast
- Series tìm hiểu lập trình java
- Series crack Intellij IDEA
- Series tìm hiểu Docker
- Series tìm hiểu Git
- Series tìm hiểu Kafka
- Series tìm hiểu ElasticSearch
- Series tìm hiểu Linux
- Series phỏng vấn kĩ sư phần mềm
- Series review sách