定义
public static void printList(List<?> list) {
for (Object elem : list){
System.out.println(elem + " ");
}
}
public static <T> void printList2(List<T> list) {
for (T elem : list){
System.out.println(elem + " ");
}
}
使用
MyList.printList(Arrays.asList(1, 2, 3));
MyList.printList2(Arrays.asList(1, 2, 3));
>是可以任意寫,不受限制,
這個效果是一樣的,並非要求出現T的地方都是相同的類型。實際上上面兩個方法編譯成字節碼,List,List>在底層都是List
但第二種用法在實際的開發中起不到任何作用。為什麼呢,除非泛型是聲明回傳值的類型,或是聲明在類別層次的。比如說
或者是
這才起到了作用。
否則,像這樣用
public static <T> void fun1(List<T> list)
這裡的泛型起到了什麼作用?真沒看出來起了什麼作用。應該說,沒必要這樣用吧。
?和T都表示不確定的類型,但是使用T的話可以進行物件的操作,例如 returnt; 這種時候就用T不用?了。
List<?>
是List<T>
的超类,能使用List<?>
的地方都可以使用List<T>