舉例如下
class Animal<T> { private T age; private T weight; public Animal(T a, T w) { setAge(a); setWeight(w); } public T getAge() { return age; } public void setAge(T n) { age = n; } public T getWeight() { return weight; } public void setWeight(T n) { weight = n; } public void speak() { System.out.println("哈囉,我已經" + getAge() + "歲,有" + getWeight() + "公斤重"); } } class GenericDemo { public static void main(String[] args) { Animal puppy1, puppy2; puppy1 = new Animal(6, "70"); puppy2 = new Animal("八十八", "五千"); puppy1.speak(); puppy2.speak(); } } /* 《程式語言教學誌》的範例程式 http://pydoing.blogspot.com/ 檔名:GenericDemo.java 功能:示範物件導向的基本觀念 作者:張凱慶 時間:西元 2010 年 10 月 */
編譯後執行,結果如下
我們暫時不管編譯器 (compiler) 的警告訊息,第 1 行
class Animal<T> {
這裡的 <T> ,就是角括號圍起來的大寫字母 T ,這是一個識別字,表示 Type 的縮寫,意思是 Animal 中任何使用 T 的地方,無論傳入何種型態,如 int 或 String 等,這裡的 T 都會被代換成 int 或 String 。
泛型在 Collection 相關的型態很常用到,這是由於陣列 (array) 會在編譯時期進行型態檢查,直接挑出錯誤,然而 Collection 的型態在編譯時會過關,反而在執行時才會出錯。使用泛型可使問題由編譯器挑出來,因此提供了更好的型態安全性。
中英文術語對照 | |
---|---|
成員 | member |
泛型 | generic |
編譯器 | compiler |
陣列 | array |
參考資料
http://download.oracle.com/javase/tutorial/java/generics/generics.html
http://download.oracle.com/javase/tutorial/java/generics/gentypes.html
http://download.oracle.com/javase/tutorial/java/generics/generics.html
http://download.oracle.com/javase/tutorial/java/generics/gentypes.html
3 則留言:
請問傳入的型態若是object型態也適用嗎?
T 可以是任意的物件型態,但必須是相同的物件型態唷
^_^
https://www.blogger.com/profile/10096342137342970684
張貼留言