实际不用多说只举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作为泛型变量使用(这个变量名是随意起的,只不过要前后对应上).