Java--(List list = new ArrayList(); )使用和理解

List<String> list = new ArrayList<String>();

第一次看到這行代碼是一頭霧水,查了好久才弄清楚這是什麼東西,怎麼用。

示例1:

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);   //需要進行String進行強轉
            System.out.println("name:" + name);
        }
    }
}

在這段代碼中,定義了一列表對象list,並在其中添加了兩個字符串和一個整形數據,在遍歷此列表讀取數據時,則需要首先將此列表轉型爲字符串型才能夠輸出(紅色代碼),而且,我們也不知道此列表是什麼類型的,這就造成了一些不必要的麻煩,而泛型就可以很好的解決這些問題。

示例2:

public class GenericTest {
 
    public static void main(String[] args) {
 
 
        List<String> list = new ArrayList<String>();
        list.add("qqyumidi");
        list.add("corn");
        //list.add(100);   //此處會報錯,原因是在定義列表對象時就已經聲明瞭這是一個字符串類型的列表,所以不可以在裏面添加整形的數據
 
        for (int i = 0; i < list.size(); i++) {
            String name = list.get(i); //無需進行字符串強轉,前面對列表已經泛型定義成String了。
            System.out.println("name:" + name);
        }
    }
}

上面這段代碼用泛型改寫(藍色代碼表示泛型寫法),其中表示此列表是字符串型,因此,在循環中紅色代碼處,不需要再對列表進行強制轉型。這就是泛型。

同理,類似的方法也可以應用到類和方法中,如下代碼所示:
示例3:

public class GenericTest {
 
    public static void main(String[] args) {
 
        Box<String> name = new Box<String>("corn");
        System.out.println("name:" + name.getData());
    }
}
 
class Box<T> { 
    private T data; 
    public Box(T data) {
        this.data = data;
    } 
    public T getData() {
        return data;
    } 
}

其中,類Box定義時在其旁邊加了,T表示此類的數據類型,T的作用相當於方法中的形參,等待被調用時輸入實參。  
在main函數中,將Sting類型傳入形參,此時,Box類就是String型。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章