[J2SE 5.0專題][2.1]泛型

[J2SE 5.0專題][2.1]泛型

大凡用過C/C++的朋友對“泛型”這個詞都不會陌生吧?我相信有過一些Java編碼經驗的朋友或多或少也遇到過使用集合類的方法時必須要手工做類型轉換的情況。看下面的例子:

import java.util.ArrayList;
import java.util.Iterator;

public class MyGenerics {

    public static void main(String[] args) {
        useNonGenerics();
        useGenerics();
    }
   
    private static void useNonGenerics() {
        ArrayList aList = new ArrayList();
        aList.add(new Integer(7));
        aList.add(new Integer(17));
        int sum = 0;
        Iterator iter = aList.iterator();
        while (iter.hasNext()) {
            sum += ((Integer)iter.next()).intValue();
        }
        System.out.println(sum);
    }
   
    private static void useGenerics() {
        ArrayList<Integer> aList = new ArrayList<Integer>();
        aList.add(new Integer(7));
        aList.add(new Integer(17));
        int sum = 0;
        Iterator<Integer> iter = aList.iterator();
        while (iter.hasNext()) {
            sum += iter.next().intValue();
        }
        System.out.println(sum);
    }
}


在這個例子中我提供了兩個不同方法來完成同樣的事,例子本身有沒有意義不重要,我只是想讓你看到一些實際在Java中使用泛型的代碼。

泛型的好處在於它可以避免那些我們本不需要去考慮的類型轉換,並且可以提供編譯期的類型安全檢查。(注意,在上面的例子中,如果不使用泛型,那麼我們可以把iter.next()返回的對象轉換成任意類型,然後調用那個類型的方法而不會拋出任何編譯期異常)同時,泛型的引入也爲模板類和模板方法的出現奠定了基礎。

如果有時間,建議大家把新的java.util.Collection的源碼拿下來看一看,你完全可以實現自己的支持泛型的API。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章