實際不用多說只舉2個例子就行:
//例1 static void fromArrayToCollection(Object[] a, Collection<?> c) {for (Object o : a) { c.add(o); // 編譯錯誤,錯誤原因也很簡單,<?>是無上下界的通配符泛型,所以編譯器根本無法確認類型 } } //例2 static <T> void fromArrayToCollection(T[] a, Collection<T> c) {for (T o : a) {c.add(o); // 無問題 } }
簡單說一下正確的例2:
<T>僅僅是聲名此方法中T作為泛型變量使用(這個變量名是隨意起的,只不過要前后對應上).