Generics trong Java là một tính năng mạnh mẽ cho phép viết mã linh hoạt và tái sử dụng bằng cách cho phép lớp, interface và phương thức có thể hoạt động trên các loại (types) khác nhau mà không cần phải chuyển đổi giữa các loại hoặc sử dụng kiểu Object
. Generics được giới thiệu từ Java 5 và đã trở thành một phần quan trọng của ngôn ngữ.
Mục Đích Của Generics
-
Kiểm Tra Kiểu Tại Thời Điểm Biên Dịch: Generics tăng cường kiểm tra kiểu của Java bằng cách cho phép các lỗi được phát hiện sớm hơn, tại thời điểm biên dịch, thay vì gây ra các lỗi tại thời điểm chạy (runtime).
-
Loại Bỏ Sự Cần Thiết Của Ép Kiểu: Khi sử dụng generics, không cần phải ép kiểu đối tượng khi lấy chúng ra từ một collection, vì bạn đã chỉ định kiểu đối tượng mà collection chứa.
-
Tăng Cường Tính Tái Sử Dụng Mã: Generics cho phép lớp hoặc phương thức có thể hoạt động trên một "kiểu" chung, giúp mã nguồn dễ dàng tái sử dụng với các kiểu dữ liệu khác nhau.
Cách Sử Dụng
Generics có thể được áp dụng cho lớp, interface và phương thức. Dưới đây là một số ví dụ:
-
Generics trong Lớp và Interface:
public class Box<T> { private T t; public void set(T t) { this.t = t; } public T get() { return t; } }
Trong ví dụ này,T
là một loại tham số, có nghĩa làBox
có thể được sử dụng với bất kỳ loại nào. -
Generics trong Phương Thức:
public class Util { public static <T> T getMiddle(T[] a) { return a[a.length / 2]; } }
Phương thứcgetMiddle
có thể được sử dụng với mảng của bất kỳ loại nào và trả về phần tử ở giữa mảng.
Ràng Buộc Loại Với Generics
Bạn cũng có thể giới hạn các loại tham số mà một lớp, interface hoặc phương thức generics có thể chấp nhận, sử dụng ràng buộc loại (type bounds):
public class Box<T extends Number> {
private T t;
// Phương thức và khai báo...
}
Trong ví dụ này, chỉ các loại thừa kế từ Number
(ví dụ như Integer
, Double
) mới có thể được sử dụng với Box
.
Generics là một phần không thể thiếu trong lập trình Java hiện đại, giúp tạo ra các ứng dụng linh hoạt, dễ đọc và dễ bảo trì hơn.
Comments