首頁 >Java >java教程 >java 泛型中 T 和 問號(通配符)的區別

java 泛型中 T 和 問號(通配符)的區別

高洛峰
高洛峰原創
2016-12-19 15:43:112274瀏覽

類型本來有:簡單類型和複雜類型,引入泛型後把複雜型別分的更細了;

現在List, 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中文網!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn