類型本來有:簡單類型和複雜類型,引入泛型後把複雜型別分的更細了;
現在List
泛型的好處如:
開始版本
public void write(Integer i, Integer[] ia); public void write(Double d, Double[] da);
泛型版本
public <T> void write(T t, T[] ta);
簡單了代碼
定義泛型
1.定義在類別後面
緊跟類S, 且S 繼承T
2.定義在方法裝飾符後面
緊跟修飾符後面(public)
public class TestClassDefine<T, S extends T>{}
定義泛型T, S, 且S 繼承T
實例化泛型
1.實例化定義在類別上的泛型
第一聲明類別變數或實例化時。例如
public <T, S extends T> T testGenericMethodDefine(T t, S s){}
第二繼承類別或實作介面時。例如
List<String> list; list = new ArrayList<String>;
2.實例化定義方法上的泛型
當呼叫範式方法時,編譯器自動對型別參數(泛型)進行賦值,當不能成功賦值時報編譯錯誤
通配符(?)
上面有泛型的定義和賦值;當在賦值的時候,上面一節說賦值的都是為具體類型,當賦值的類型不確定的時候,我們用通配符(?)代替了:
如
public class MyList<E> extends ArrayList<E> implements List<E> {...}
在Java集合框架中,對於參數值是未知類型的容器類,只能讀取其中元素,不能向其中添加元素, 因為,其類型是未知,所以編譯器無法識別添加元素的類型和容器的類型是否相容,唯一的例外是NULL
更多java 泛型中T 和問號(通配符)的區別相關文章請關注PHP中文網!