Chuyển đến nội dung chính
Mô-đun 6 · Bài học 2 trong tổng số 212/14 trong khóa học~15 min
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.

Java
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ế:

Java
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.

Java
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ó.

Java
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ử

tập thể dục#java.m6.l2.e1
Nỗ lực: 0Đang tải…

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ư.

Đang tải trình chỉnh sửa…
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ập thể dục#java.m6.l2.e2
Nỗ lực: 0Đang tải…

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.

Đang tải trình chỉnh sửa…
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ập thể dục#java.m6.l2.e3
Nỗ lực: 0Đang tải…

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().

Đang tải trình chỉnh sửa…
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ử