Presentation is loading. Please wait.

Presentation is loading. Please wait.

Java@Ch21.Generics 2011.05.27.

Similar presentations


Presentation on theme: "Java@Ch21.Generics 2011.05.27."— Presentation transcript:

1

2 Outline Generics Defining Generic Classes and Interfaces
Generic Methods [Sample code] GenericStack.java 、 GenericMethodDemo.java 、 WildCardDemo1.java、WildCardDemo2.java、 WildCardDemo3.java

3 Generics Java allow you to define generic classes, interface, and methods <Prior to JDK 1.5> Comparable c = new Date(); System.out.println(c.compareTo(“red”)); <JDK 1.5> Comparable<Date> c = new Date(); Compile 會過 但執行會錯 因為Date與String型態不符 Compile 時會檢查 Date與String型態是否符合

4 Defining Generic Classes and Interfaces
程式範例:  GenericStack.java

5 使用Generic type 優點:  Certain errors can be detected at compile time rather than at runtime. 易犯的錯:  Constructor of GenericStack should be defined as (X) public GenericStack<E>() (O) public GenericStack()

6 Generic Methods 程式範例:  GenericMethodDemo.java

7 Wildcard Generic Type 程式範例:  WildCardDemo1.java  WildCardDemo2.java

8 A wildcard generic type has three forms : ?
Unbounded wildcard (same as ? extends Object) ? extends T bounded wildcard ? super T lower-bound wildcard (T is generic type)

9 • 泛型方法讓程式設計師可以用單一方法宣告,指定一組相關的方法。
• 泛型類別讓程式設計師可以用單一方法宣告,指定一組相關的類別。 • 泛型方法和類別是Java最強大的功能之一,可以達到軟體重用,並且可確保編譯時期型別安全性。

10 範例: Overloading 在編譯時期: 編譯器會判斷引數 integerArray的型別 並且試著找相對應型態的
printArray方法

11

12 範例: Generic method 如果幾個多載化方法對每種引數型別都做一樣的事,那麼這些多載化方法可以用泛型方法,寫起程式更簡潔、更方便。您可以寫單一個泛型方法宣告,就可以讓不同的引數型別呼叫。編譯器會依照傳給泛型方法的引數型別,適當地處理每個方法呼叫。

13 宣告printArray方法使用Object陣列當成參數就好。這樣就可以達到同樣的結果,因為任何Object都可以當成String輸出

14 常見的程式設計錯誤 宣告泛型方法時,在返回型別之前忘記放型別參數區,是一種語法錯誤。當編譯器遇到這種方法時,無法瞭解型別參數名稱。
對一個方法呼叫,如果編譯器找不到符合的非泛型或泛型方法宣告,就會發生編譯錯誤。 如果編譯器對一個方法呼叫,找不到符合的方法宣告,可是卻找到兩個以上的泛型方法符合,就會發生編譯錯誤。

15 程式練習:  將 Overloading 改成 Generic method 也就是使用泛型方法 printArray,印出陣列的元素


Download ppt "Java@Ch21.Generics 2011.05.27."

Similar presentations


Ads by Google