類型本來有:簡單類型和復雜類型,引入泛型后把復雜類型分的更細了;
-
現在List<Object>, List<String>是
兩種不同的類型;且無繼承關系; -
泛型的好處如:
開始版本
public void write(Integer i, Integer[] ia); public void write(Double d, Double[] da);泛型版本
public <T> void write(T t, T[] ta);簡便了代碼
定義泛型
-
1.定義在類后面
緊跟
類名后面public class TestClassDefine<T, S extends T>{}定義泛型 T, S, 且S 繼承 T
-
2.定義在方法
裝飾符后面緊跟
修飾符后面(public)public <T, S extends T> T testGenericMethodDefine(T t, S s){}定義泛型 T, S, 且S 繼承 T
實例化泛型
- 1.實例化
定義在類上的泛型
第一聲明類變量或者實例化時。例如
List<String> list; list = new ArrayList<String>;
第二繼承類或者實現接口時。例如
public class MyList<E> extends ArrayList<E> implements List<E> {...}
- 2.實例化
定義方法上的泛型<br/>
當調用范型方法時,編譯器自動對類型參數(泛型)進行賦值,當不能成功賦值時報編譯錯誤
通配符(?)
上面有泛型的定義和賦值;當在賦值的時候,上面一節說賦值的都是為具體類型,當賦值的類型不確定的時候,我們用通配符(?)代替了:
如
List<?> unknownList; List<? extends Number> unknownNumberList; List<? super Integer> unknownBaseLineIntgerList;
在Java集合框架中,對於參數值是
未知類型的容器類,只能讀取其中元素,不能向其中添加元素, 因為,其類型是未知,所以編譯器無法識別添加元素的類型和容器的類型是否兼容,唯一的例外是NULL
源自:http://blog.csdn.net/jinuxwu/article/details/6771121
