錯誤的方式
正确的方式:
總結:
使用?通配符可以引用其他各種參數化的類型,?通配符定義的變量主要用作引用,可以調用與參數化無關的方法,不能調用與參數化有關的方法。
上圖中,大紅叉的方法都是和類型相關的,在使用泛型通配符?時,不能調用。
Collection<?> a可以和任意參數化的類型比對,但到底比對的是什麼類型,隻有以後才知道,是以,
a=new ArrayList<Integer>();和 a= new ArrayList<String>();都可以,但a.add(new Date);或者 a.add("abc");都不行。
Cols<Object>中的Object隻是說明Cols<Object>執行個體對象中的方法接收的參數是Object
Cols<Object>是一種具體類型,new HashSet<Date>也是一種具體類型,兩者沒有相容性。
限定通配符的上邊界
正确 Vector<? extends Number> x=new Vector<Integer>();
錯誤 Vector<? extends Number> x=new Vector<String>();
限定通配符的下邊界
正确 Vector<? super Integer> x=new Vector<Number>();
錯誤 Vector<? super Integer> x=new Vector<Byte>();
提示
限定通配符總是包括自己
開始做,堅持做,重複做