Bài học theo mô-đun (2/2)
Generics trong Java
Generics (Loại chung) được giới thiệu trong Java để cho phép các lớp, giao diện và phương thức hoạt động trên các loại khác nhau dưới dạng tham số. Điều này đảm bảo an toàn cho kiểu thời gian biên dịch và tránh các kiểu ép kiểu rõ ràng tốn kém khi chạy.
Lớp học chung
Một lớp chung được xác định bằng cách sử dụng dấu ngoặc nhọn <T> trong đó T đóng vai trò là trình giữ chỗ cho loại sẽ được chỉ định khi lớp được khởi tạo.
public class Box<T> {
private T content;
public void setContent(T content) {
this.content = content;
}
public T getContent() {
return content;
}
}Khi tạo đối tượng Box, chúng tôi chỉ định loại thực tế:
Box<Integer> integerBox = new Box<>();
integerBox.setContent(123);
int value = integerBox.getContent(); // No cast needed!Phương pháp chung
Bạn có thể định nghĩa một phương thức chung duy nhất có thể chấp nhận các tham số kiểu khác nhau. Tham số kiểu được đặt trước kiểu trả về của phương thức.
public static <E> void printArray(E[] elements) {
for (E element : elements) {
System.out.println(element);
}
}Ký tự đại diện và loại giới hạn
Chúng ta có thể hạn chế các loại được một loại chung chấp nhận bằng cách sử dụng từ khóa extends (giới hạn trên) để chấp nhận một loại cụ thể hoặc các lớp con của nó.
public static <T extends Number> void processNumber(T number) {
// Accepts Integer, Double, Float, etc.
System.out.println(number.doubleValue());
}Hãy tự mình thử
Hoàn thành lớp chung Box bằng cách xác định getter getValue() trả về T và setter setValue(T value) đặt giá trị biến riêng tư.
Hiển thị gợi ý
Viết các phương thức có chữ ký chính xác bằng cách sử dụng tham số loại chung `T`.
Giải pháp khả dụng sau 3 lần thử
Tạo một phương thức chung tĩnh printArray lấy một mảng có tên mảng kiểu T[] và in từng phần tử bằng vòng lặp for-each.
Hiển thị gợi ý
Tham số loại `<T>` phải được đặt ngay sau `static` và trước loại trả về `void`.
Giải pháp khả dụng sau 3 lần thử
Tạo một lớp tĩnh StringContainer triển khai giao diện Container được tham số hóa bằng String. Xác định một hàm tạo lấy tham số Chuỗi và triển khai phương thức getItem().
Hiển thị gợi ý
Thay thế kiểu chung `T` bằng `String` trong chữ ký lớp và trong kiểu trả về của `getItem()`.
Giải pháp khả dụng sau 3 lần thử