List<String> list = new ArrayList<String>();
第一次看到這行代碼是一頭霧水,查了好久才弄清楚這是什么東西,怎么用,所以記錄下來,方便以后查閱。
首先看一段代碼
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);
System.out.println("name:" + name);
}
}
}
在這段代碼中,定義了一列表對象list,並在其中添加了兩個字符串和一個整形數據,在遍歷此列表讀取數據時,則需要首先將此列表轉型為字符串型才能夠輸出(紅色代碼),而且,我們也不知道此列表是什么類型的,這就造成了一些不必要的麻煩,而泛型就可以很好的解決這些問題。
看以下代碼:
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);
System.out.println("name:" + name);
}
}
}
上面這段代碼用泛型改寫(藍色代碼表示泛型寫法),其中<String>表示此列表是字符串型,因此,在循環中紅色代碼處,不需要再對列表進行強制轉型。這就是泛型。同理,類似的方法也可以應用到類和方法中,如下代碼所示:
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表示此類的數據類型,T的作用相當於方法中的形參,等待被調用時輸入實參。
在main函數中,將Sting類型傳入形參,此時,Box類就是String型
