天天看點

38_泛型的通配符擴充應用問題:定義一個方法,該方法用于列印出任意參數化類型的集合中的所有資料,該方法如何定義呢?泛型中?通配符的擴充

錯誤的方式

 

正确的方式:

總結:

使用?通配符可以引用其他各種參數化的類型,?通配符定義的變量主要用作引用,可以調用與參數化無關的方法,不能調用與參數化有關的方法。

38_泛型的通配符擴充應用問題:定義一個方法,該方法用于列印出任意參數化類型的集合中的所有資料,該方法如何定義呢?泛型中?通配符的擴充

上圖中,大紅叉的方法都是和類型相關的,在使用泛型通配符?時,不能調用。

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>();

提示

限定通配符總是包括自己

開始做,堅持做,重複做