Lập trình java - Bài 14: Genegic

Lập trình java - Bài 14: Genegic

 Genegic trong lập trình java

Nội dung bài học 

Khái niệm Genegics
Ưu điểm Genegics
Tạo class generic và method
Giới hạn kiểu dữ liệu
Generic method
Generic Interface
Một số hạn chế

Khái niệm Genegics

 - Thuật ngữ “Generics” nghĩa là tham số hóa kiểu dữ liệu. Tham số hóa kiểu dữ liệu rất quan trọng vì nó cho phép chúng ta tạo ra và sử dụng một class, interface, method với nhiều kiểu dữ liệu khác nhau.

 - Một class, interface hay một method mà thực hiện trên một kiểu tham số xác định thì gọi là generic.

Ví dụ: Sử dụng ArrayList với các kiểu dữ liệu khác nhau ArrayList mylist = new ArrayList(); 

mylist.add(10); 

mylist.add(“Hello”); 

mylist.add(true);

mylist.add(15.75);

Lấy ra:

int a = (Integer)mylist.get(0); 

String str = (String)mylist.get(1);

Khái niệm generics trong lập trình java

Ví dụ: Sử dụng ArrayList với các kiểu dữ liệu String

ArrayList<String>mylist = new ArrayList<String>();


mylist.add(“Hello”); 

mylist.add(“Goodbye”);

Lấy ra:

String str = mylist.get(0);

Ưu điểm của generic 

Kiểm tra kiểu dữ liệu trong thời điểm dịch

Trình biên dịch Java áp dụng việc kiểm tra đoạn mã generic để phát hiện các vấn đề như vi phạm an toàn kiểu dữ liệu. Việc sửa lỗi tại thời gian biên dịch dễ dàng hơn nhiều khi sửa chữa lỗi tại thời điểm chạy chương trình.

Ưu điểm của generic trong lập trình java

Không cần ép kiểu dữ liệu

- Đoạn code sau đây không dùng generic nên phải ép kiểu:
List list = new ArrayList(); 
list.add("hello");
String s = (String) list.get(0); //phải ép kiểu

- Khi dùng generic, không cần ép kiểu: 
List<String> list = new ArrayList<String>();
 list.add("hello");
String s = list.get(0); //không ép kiểu

Cho phép người trình viên thực hiện các thuật toán tổng quát.

Bằng cách sử dụng generics, người lập trình có thể thực hiện các thuật toán tổng quát với các kiểu dữ liệu tùy chọn khác nhau, và nội dung đoạn code trở nên rõ ràng và dễ hiểu.
Ưu điểm của generic - Cho phép người trình viên thực hiện các thuật toán tổng quát

Tạo class generic và method

Quy ước đặt tên tham số kiểu cho Generics

Tạo class generic và method trong lập trình java

Tạo generics class với 1 tham số kiểu:

Tạo generics class với 1 tham số kiểu trong lập trình java

Tạo generics class với 1 tham số kiểu trong lập trình java

Tạo generics class với 2 tham số kiểu

Tạo generics class với 2 tham số kiểu trong lập trình java

Tạo generics class với 2 tham số kiểu trong lập trình java

Giới hạn kiểu dữ liệu

Giới hạn kiểu dữ liệu trong lập trình java

Giới hạn kiểu dữ liệu trong lập trình java

Các ký hiệu đại diện

Các ký hiệu đại diện trong lập trình java

Các ký hiệu đại diện generics

Xét ví dụ sau:
Các ký hiệu đại diện generics trong lập trình java


Ký tự đại diện <?>

ký tự đại diện <?> trong lập trình java

Ký tự đại diện <? extends type>

Ký tự đại diện <? extends type>

Ký tự đại diện <? super type>

Ký tự đại diện <? super type> trong lập trình java

Generic Constructors

Generic Constructors trong lập trình java

Generic Interface

Generic Interface trong lập trình java


Generic Interface trong lập trình java

Một số hạn chế của Generic

Không thể khởi tạo generic với dữ liệu kiểu nguyên thủy

Pair<int, char> p = new Pair<>(8, 'a');       //error
Pair<Integer, Character> p = new Pair<>(8, 'a');

Không thể tạo instance cho kiểu dữ liệu

class Gen<T>{
T obj;
Gen(){
obj= new T();    //Illegal
}
}

Không thể là static trong class

class Gen<T>{
static T obj;                 //Kiểu T không thể là static
static T getObj(){       //Phương thức không thể static
return obj;
}
}

Không thể tạo mảng

Gen<Integer> gens[]= new Gen<Integer>[10];    //error
Gen<?> gens[] = new Gen<?>[10];                     //ok
Gens[0] = new Gen<Integer>(25);
Gens[1] = new Gen<String>(“Hello”);

Giới hạn về ngoại lệ generic

Một class generic không thể kế thừa class Throwable. Do đó ta không thể tạo class ngoại lệ là generic.

Tổng kết bài học

Khái niệm Genegic
Ưu điểm Genegic
Tạo class generic và method
Giới hạn kiểu dữ liệu
Các ký hiệu đại diện
Generic method
Generic Interface
Một số hạn chế

Xem tiếp: Bài 15: Applets



ĐĂNG NHẬN XÉT

Previous Post Next Post