泛型的概念
泛型:即“參數化類型”。說到參數,我相信大家首先想到的是,在定義方法時的形數和在調用方法時傳遞的實參。那么對于參數化類型,就是將類型有與原來的具體類型參數化。和方法中的參數類似。說白了就是將類型當作參數一樣傳遞過來。
為什么需要泛型
那么我們就要想一下,按照以前的方式不也是挺好嗎,為什么我們需要使用泛型呢?
對于這個問題我們可以通過一個例子來說明:
在上面這個例子中,因為集合可以存放任意類型的對象數據,所以當我們想要獲取集合中字符串的長度時,我就需要用到數據類型轉換。但是,在集合中不僅僅有字符串,也存在這int類型和boolean類型,所以再運行時期,會出現類型轉換異常(ClassCastException)。
為了解決類似這樣的問題,所以泛型就應運而生了。
通過使用泛型,將代碼中的運行時異常提前到編譯時異常,代碼演示:
List<String> list = new ArrayList<String>();
…
//這時候,如果往集合中存儲非字符串數據,代碼再編譯時期就報錯
泛型的使用
泛型的使用方式:泛型類,泛型方法,泛型接口
泛型類
泛型應用與類中,被稱為泛型類,例如:ArrayList,Linked List
泛型類的定義格式:
public class Demo<泛型標識:可以寫任意的標識號>{
private 泛型標識 var; //使用泛型定義變量
}
泛型的確定時機:泛型類中的泛型會再創建該類對象時決定泛型類型
Demo<String> demo = new Demo<String>(); //泛型是String
Demo<Integer> demo = new Dmeo<Interger>(); //泛型是Interger
泛型方法
泛型方法:是指帶有泛型聲明的方法。
泛型方法的定義格式:
public class Demo{
public <泛型標識> void info(泛型標識 var){}
}
泛型的確定時機:在調用方法的時候,會根據你所傳遞的參數類型,確定泛型的類型
Demo demo = new Dmeo();
demo.info(“togogo”); //這時候泛型是String類型
demo.info(true); //泛型是boolean類型
泛型接口
泛型接口:帶有泛型的接口稱為泛型接口。
泛型接口的聲明格式和泛型類類似
public interface Demo<泛型標識>{}
泛型接口中的泛型決定方式有兩種:
第一種:在實現接口的時候決定泛型
public class Test implement Demo<String>{}
第二種:是在創建實現類的時候決定泛型
public class Test<泛型標識> implement Demo<泛型標識>{}
Test<String> test = new Test<String>();
這就是泛型的幾種常用方式。