1. 程式人生 > >什麽是Java泛型(正在整理)

什麽是Java泛型(正在整理)

clas 出現 add 編碼 AI 什麽是 問題 java泛型 list

為什麽要使用泛型?

引入例子

public class GenericTest {

    public static void main(String[] args) {
        List list = new ArrayList();
        list.add("qqyumidi");
        list.add("corn");
        list.add(100);

        for (int i = 0; i < list.size(); i++) {
            String name = (String) list.get(i); // 1
            System.out.println("name:" + name);
        }
    }
}

  

上述代碼在編譯器沒有問題,但在運行期間,將會報錯。因為List的add方法的參數為object,如果不知道List類型時,通過強轉獲值,這時就會報錯了。因為編譯階段正常,而運行時會出現“java.lang.ClassCastException”異常。因此,導致此類錯誤編碼過程中不易發現。

在如上的編碼過程中,我們發現主要存在兩個問題:

1.將對象放入集合的時候,集合不會記住對象的類型,當再次從集合中取出此對象時,改對象的編譯類型變成了Object類型,但運行時的類型仍然是其本身類型。 

2.因此,//1處取出集合元素時要人為的強制轉化到具體的目標類型,且很容易出現java.lang.ClassCastException異常

 (這個例子,是我在一篇博客裏找的我能讀懂的引入泛型的例子,可是我執行的時候報錯了,錯的內容是java:4: error: cannot find symbol,可能是我的jdk版本不對,我想把關於泛型的例子盡快整理完,這個錯就暫時先放這裏了。知道具體錯的朋友,請在評論區給我留言,謝謝。)

怎麽樣才能讓集合記住集合內部元素各個類型,且能夠達到只要編譯時不出現問題,運行時就不出現java.lang.ClassCastException異常呢?答案就是使用泛型。

什麽是泛型?

泛型,即“參數化類型”。一提到參數,最熟悉的就是定義方法時有形參,然後調用此方法時傳遞實參。那麽也將類型由原來的具體的類型參數化,類似於方法中的變量參數,類型也定義成參數形式(稱之為類型形參),然後在使用時傳入具體的類型(類型實參)

public class GenericTest {

    public static void main(String[] args) {

        List<String> list = new ArrayList<String>();
        list.add("qqyumidi");
        list.add("corn");
        //list.add(100);   // 1  提示編譯錯誤

        for (int i = 0; i < list.size(); i++) {
            String name = list.get(i); // 2
            System.out.println("name:" + name);
        }
    }
}

  

什麽是Java泛型(正在整理)