事实上,由于泛型参数将擦除到它的第一个边界,因此List<?>看起来等价于List实际上也是List<Object>。
List实际上表示"持有任何Object类型的原生List,而List<?>表示"具有某种特定类型的非原生List,只是我们现在不知道那种类型是什么"。
public static void test(List list,Object o){ // (set capture of ?) can not be applied to Object // list.add(o); // cannot resolve symbol T //T t = list.get(0); Object r = list.get(0); }
public staticT exact1(List list){ T t = list.get(0); return t; } public static void main(String[] args) { List list = new ArrayList (); List list1 = new ArrayList (); List list2 = new ArrayList (); Object oo = exact1(list1); Long oo3 = exact1(list2); }```**使用带有泛型类型参数的转型或instanceof 不会有任何效果**``` //将会产生"unchecheked cast" List list3 =(List ) list1; //要使用以下的方式 List list4 = List.class.cast(list1);```