泛型
泛型:可以在類或方法中預支地使用未知的類型。
一般在創建對象時,將未知的類型確定具體的類型。當沒有指定泛型時,默認類型為Object類型。
使用泛型的好處
<1>將運行時期的ClassCastException,轉移到了編譯時期變成了編譯失敗。
<2>避免了類型強轉的麻煩。
泛型是數據類型的一部分,我們將類名與泛型合併一起看做數據類型。
泛型的定義與使用
我們在集合中會大量使用到泛型,這裡來完整地學習泛型知識。
泛型,用來靈活地將數據類型應用到不同的類、方法、接口當中。將數據類型作為參數進行傳遞。
定義和使用含有泛型的類
定義格式:
修飾符 class 類名 { }
例如,API中的ArrayList集合:
泛型在定義的時候不具體,使用的時候才變得具體。在使用的時候確定泛型的具體數據類型。
class ArrayList{
public boolean add(E e){ }
public E get(int index){ }
....
}
使用泛型: 即什麼時候確定泛型。
在創建對象的時候確定泛型
例如, ArrayList<string> list = new ArrayList<string>();/<string>/<string>
此時,變量E的值就是String類型,那麼我們的類型就可以理解為:
class ArrayList<string>{
public boolean add(String e){ }
public String get(int index){ }
...
}
/<string>
再例如, ArrayList<integer> list = new ArrayList<integer>();/<integer>/<integer>
此時,變量E的值就是Integer類型,那麼我們的類型就可以理解為:
class ArrayList<integer> {
public boolean add(Integer e) { }
public Integer get(int index) { }
...
}
/<integer>
含有泛型的方法
定義格式:
修飾符 返回值類型 方法名(參數){ }
含有泛型的接口
定義格式:
修飾符 interface接口名 { }
定義類時確定泛型的類型
此時,泛型E的值就是String類型。
始終不確定泛型的類型,直到創建對象時,確定泛型的類型
泛型通配符
泛型通配符
當使用泛型類或者接口時,傳遞的數據中,泛型類型不確定,可以通過通配符>表示。但是一旦使用泛型的通配符後,只能使用Object類中的共性方法,集合中元素自身方法無法使用。
通配符基本使用
泛型的通配符:不知道使用什麼類型來接收的時候,此時可以使用?,?表示未知通配符。
此時只能接受數據,不能往該集合中存儲數據。
泛型不存在繼承關係 Collection list = new ArrayList();這種是錯誤的。
通配符高級使用----受限泛型
之前設置泛型的時候,實際上是可以任意設置的,只要是類就可以設置。但是在JAVA的泛型中可以指定一個泛型的上限和下限。
閱讀更多 學習編程 的文章