Bài giảng Lập trình hướng đối tượng - Chương 6: Lập trình Generic - Châu Thị Bảo Hà

Sử dụng Wildcard trong Generic Trong lập trình generic, ký tự “?” đại diện cho kiểu chưa biết Wildcards được dùng cho vài tình huống: kiểu tham số kiểu thuộc tính kiểu biến cục bộ kiểu trả về “?” Đại diện cho một kiểu chưa xác định Ví dụ: List list = new ArrayList(); “? extends Type” Đại diện cho một kiểu là lớp con của lớp được chỉ ra hoặc chính nó Ví dụ: List list = new ArrayList(); “? super Type” Đại diện cho một kiểu là lớp cha của lớp được chỉ ra hoặc chính nó Ví dụ: List list = new ArrayList();

pptx24 trang | Chia sẻ: thucuc2301 | Lượt xem: 656 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Bài giảng Lập trình hướng đối tượng - Chương 6: Lập trình Generic - Châu Thị Bảo Hà, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Chương 6 LẬP TRÌNH GENERICMục tiêuTrình bày được mục đích của lập trình GenericCó thể hiện thực các lớp và các phương thức GenericTrình bày được mối quan hệ giữa các kiểu Generic và kế thừaNội dung6.1. Đặt vấn đề6.2. Mục đích của Generic6.3. Generics ở mức lớp 6.4. Generics ở mức phương thức6.5. Sử dụng Type Bounds6.6. Sử dụng Wildcard trong Generic6.7. Generics và xử lý ngoại lệ6.8. Thừa kế và Generic36.1. Đặt vấn đềTrước khi có JDK 5.0, người lập trình có thể đưa bất kỳ đối tượng nào vào Collection, ví dụ: List myList = new ArrayList(10); myList.add(new Integer(10)); myList.add("Hello, World"); Do đó, khi muốn lấy một đối tượng, người lập trình phải dùng toán tử ép kiểu, ví dụ:Integer myInt = (Integer)myList.get(0); 6.1. Đặt vấn đềNếu người lập trình vô ý chuyển đổi sai kiểu, chương trình vẫn có thể thực thi nhưng sẽ xảy ra ngoại lệCó thể khắc phục bằng cách dùng toán tử instance of, ví dụ: Iterator listItor = myList.iterator(); while (listItor.hasNext()) { { Object myObject = listItor.next(); Integer myInt; if (myObject instanceof Integer) { myInt = (Integer)myObject; } }6.2. Mục đích của GenericsJDK 5.0 cung cấp sự chuyển đổi an toàn kiểu lúc biên dịch cho Collections Framework thông qua GenericGeneric cho phép người lập trình xác định trước loại đối tượng muốn lưu trong CollectionDo đó, không cần phải ép kiểu khi lấy đối tượng. Và nếu có phép gán sai kiểu, trình biên dịch cũng sẽ phát sinh lỗiVí dụ:6.3. Generic ở mức lớpLớp Generic là một cơ chế để chỉ rõ mối quan hệ giữa lớp và kiểu dữ liệu liên quan đến nó - type parameterCác type parameter sẽ được xác định tại thời điểm đối tượng của lớp được tạoQuy ước về tên của type parameterViết hoa, dùng một chữ cáiE – ElementK – Key N – Number T – Type V – Value7public class GenericClass { // class body}Type parameter6.3. Generic ở mức lớpTrong các class của Collection Framework cũng được cài đặt generic, ví dụ kiểu generic của lớp ArrayList viết như sau:6.3. Generic ở mức lớpVí dụ: Tạo lớp Generic96.3. Generic ở mức lớpVí dụ: Tạo lớp Generic106.4. Generic ở mức phương thứcThích hợp cho các phương thức overloading6.4. Generic ở mức phương thứcGeneric ở mức phương thức là phạm vi của kiểu dữ liệu giới hạn trong một phương thứcCú pháp:Các type parameter được khai báo trong phạm vi của phương thứcType parameter phải được chỉ rõ trước kiểu dữ liệu trả về của phương thức và đặt trong cặp dấu Có thể dùng tham số kiểu cho:Các tham số của phương thứcDữ liệu trả về Biến cục bộ126.4. Generic ở mức phương thứcVí dụ:13Output6.5. Sử dụng Type BoundsVí dụ:public static T min(T[] array) {T min = array[0];for (int i = 1; i 0) min = array[i]; }return min;}Vấn đề: Làm sao để trình biên dịch biết kiểu T sẽ có thể so sánh được (dùng được hàm compareTo)?public static T min(T[] array) {T min = array[0];for (int i = 1; i 0) min = array[i]; }return min;}6.6. Sử dụng Wildcard trong GenericTrong lập trình generic, ký tự “?” đại diện cho kiểu chưa biếtWildcards được dùng cho vài tình huống: kiểu tham sốkiểu thuộc tínhkiểu biến cục bộkiểu trả về156.6. Sử dụng Wildcard trong Generic“?”Đại diện cho một kiểu chưa xác địnhVí dụ: List list = new ArrayList();“? extends Type”Đại diện cho một kiểu là lớp con của lớp được chỉ ra hoặc chính nóVí dụ: List list = new ArrayList();“? super Type”Đại diện cho một kiểu là lớp cha của lớp được chỉ ra hoặc chính nóVí dụ: List list = new ArrayList();166.6. Sử dụng Wildcard trong GenericVí dụ: ?17public static void printData( List list ) {        for( Object obj : list ) {            System.out.print(obj + "::");        }}6.6. Sử dụng Wildcard trong GenericVí dụ: ? extends Type18? Là kiểu Number hoặc kiểu con của Number6.6. Sử dụng Wildcard trong GenericVí dụ: ? super Typepublic static void addNumbers(List list) {for (int i = 1; i myClass1 = new MyClass();        MyClass myClass2 = new MyClass();        //myClass2=myClass1; // compilation error since MyClass is not a MyClass        obj = myClass1; // MyClass parent is Object    }         public static class MyClass{} }6.8. Thừa kế và Generics2324

Các file đính kèm theo tài liệu này:

  • pptxoop_06_lap_trinh_generics_5611_1807376.pptx
Tài liệu liên quan