Java Generics được thêm vào ngôn ngữ lập trình Java từ Java 5. Generics trong java là một cách để xác định các kiểu cụ thể cho các lớp và phương thức trong ngữ cảnh khác nhau. Nghe có vẻ hơi trừu tượng, vì vậy chúng ta sẽ xem xét lần lượt các khái niệm và một số ví dụ cụ thể.
Cụ thể trong bài này chúng ta sẽ học:
Một lớp có thể tham chiếu bất kỳ kiểu đối tượng nào được gọi là lớp generic.
Hãy xem ví dụ đơn giản sau về việc tạo và sử dụng lớp generic:
1. Tạo lớp generic MyGeneric.java:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
Trong lớp trên, tham số <T> là một kiểu chung chung (bạn có thể sử dụng một ký tự bất kỳ khác T) đại diện cho bất kỳ một kiểu cụ nào.
Ví dụ khi bạn định nghĩa MyGeneric<Integer> tức là T = Integer, lúc này bạn có thể hình dung lớp MyGeneric có dạng như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
2. Tạo lớp TestGenerics3.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
Trong lớp trên, tại dòng lệnh thứ 6 chúng ta khai báo như sau MyGeneric<Integer>, có nghĩa là kiểu chung T sẽ là Integer. Tại dòng lệnh thứ 11 chúng ta khai báo như sau MyGeneric<String>, có nghĩa là kiểu chung T sẽ là String.
2 Hello
Việc đặt tên tham số là rất quan trọng để học genericis. Các tham số thông thường như sau:
Giống như lớp generic, chúng ta có thể tạo phương thức generic có thể chấp nhận bất kỳ kiểu đối số nào.
Chúng ta hãy xem một ví dụ đơn giản về phương thức generic trong java để in các phần tử của mảng. Chúng ta sử dụng E để biểu thị phần tử.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
Kết quả:
In mảng số nguyên: 10 20 30 40 50 In mảng ký tự: J A V A
Ký tự ? (dấu chấm hỏi) tượng trưng cho phần tử ký tự đại diện. Nó có nghĩa là bất kỳ loại nào. Nếu chúng ta viết <? mở rộng Number>, nó có nghĩa là bất kỳ lớp con của Number ví dụ như Integer, Float, Double vv. Bây giờ chúng ta có thể gọi phương thức của lớp Number qua bất kỳ đối tượng lớp con nào.
Hãy hiểu nó bằng ví dụ dưới đây:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
|
Kết quả:
ve hinh chu nhat. ve hinh tron. ve hinh tron.
Trước Generics, chúng ta có thể lưu trữ bất kỳ loại đối tượng nào trong collection như Non-generic. Với generics, được các lập trình java áp dụng để lưu trữ các kiểu cụ thể của các đối tượng.
1 |
|
Ví dụ sử dụng Generics trong java:
1 |
|
Ở đây, chúng ta sử dụng lớp ArrayList, nhưng bạn có thể sử dụng bất kỳ lớp Collection khác như ArrayList, LinkedList, HashSet, TreeSet, HashMap, Comparator, vv
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
Kết quả:
Java PHP C++
Bây giờ chúng ta sẽ sử dụng Map để lưu trữ dữ liệu bằng cách sử dụng generics. Ở đây, chúng ta cần phải truyền key và value:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
Kết quả:
1 Java 2 C++ 4 PHP
Có 3 ưu điểm chính của generics trong java, như sau:
1. Kiểu đối tượng an toàn: Chúng ta chỉ có thể lưu một kiểu đối tượng duy nhất trong generics. Nó không cho phép lưu trữ 2 đối tượng có kiểu khác nhau.
2. Không cần phải ép kiểu:
Trước Generics chúng ta cần phải ép kiểu, ví dụ:
1 2 3 |
|
Sau Generics chúng ta không cần phải ép kiểu đối tượng, ví dụ:
1 2 3 |
|
3. Kiểm tra lúc biên dịch: nó kiểu tra lỗi khi biên dịch nên sẽ không bị lỗi lúc runtime.
1 2 3 |
|
Nguồn tin: viettuts.vn