1、泛型在java中有很重要的地位,在面向?qū)ο缶幊碳案鞣N設(shè)計模式中有非常廣泛的應(yīng)用。什么是泛型?為什么要使用泛型?
List arrayList = new ArrayList();
arrayList.add("aaaa");
arrayList.add(100);
for(int i = 0; i< arrayList.size();i++){
String item = (String)arrayList.get(i);
System.out.println(item);
}
2、概念:在類聲明體中用到了類型參數(shù)。
/*
class 類型名<泛型標(biāo)識,泛型標(biāo)識, ...>{
private 泛型標(biāo)示 變量名;
}
*/
public class GenericDemo<T> {
private T key;
public GenericDemo(T key) {
this.key = key;
}
public T getKey() {
return key;
}
public void setKey(T key) {
this.key = key;
}
public static void main(String[] args) {
/*
類名<具體的數(shù)據(jù)類型> 對象名 = new 類目<具體的數(shù)據(jù)類型>();
JDK1.7后,可以省略成這樣:
類名<具體的數(shù)據(jù)類型> 對象名 = new 類目<>();
*/
GenericDemo<Integer> integerGenericDemo = new GenericDemo<>(10);
GenericDemo<String> stringGenericDemo = new GenericDemo<>("abc");
//如果沒有指定具體的數(shù)據(jù)類型,此時,操作類型是Object
GenericDemo genericDemo = new GenericDemo("genericDemo");
System.out.println(integerGenericDemo.key);
System.out.println(stringGenericDemo.key);
System.out.println(genericDemo.key);
//泛型類型在邏輯上可以看成是多個不同的類型,但實際上是相同類型
System.out.println(integerGenericDemo.getClass()==stringGenericDemo.getClass()); //輸出結(jié)果為true
}
}
3、泛型類只支持類類型,不支持基本數(shù)據(jù)類型(如int),但可以用包裝類(如Integer )
泛型標(biāo)識 | 含義 | |
---|---|---|
T | Type 類型 | |
E | Element 元素 | |
K | Key 鍵 | |
V | Value 值 |
4、泛型類的繼承:
1)、子類也是泛型類,子類和父類的泛型標(biāo)識要一致。子類也可以擴展泛型標(biāo)識,但子類中至少有一個泛型標(biāo)識與父類相同;
2)、子類不是泛型類,父類要明確泛型的數(shù)據(jù)類型;
//1.子類也是泛型類,子類和父類的泛型標(biāo)識要一致
class Child<T> extends Parent<T>{}
//也可以擴展,但子類中至少有一個泛型標(biāo)識與父類相同
class Child<T,E> extends Parent<T>{}
//2.子類不是泛型類,父類要明確泛型的數(shù)據(jù)類型
class Child extends Parent<String>{}
?5、泛型方法:
泛型類和泛型方法的區(qū)別 | ||
---|---|---|
泛型類 | 實例化類的時候指明泛型的具體類型 | |
泛型方法 | 調(diào)用方法的時候指明泛型的具體類型 |
修飾符 <T,E,...> 返回值類型 方法名(形參列表){
方法體...
}
1)、?public 和 返回類型中間的標(biāo)識符,可以理解為,聲明該方法為泛型方法;
2)、只有聲明了的方法是泛型方法,泛型類中的未申明的成員方法不是泛型方法;
3)、表明,該方法使用泛型類型T,可以使用在返回類型,傳入?yún)?shù)列表,方法體里;
public class GenericDemo<T> {
public static <E> void print(E... e){
for(int i = 0; i < e.length; i++){
System.out.println(e[i]);
}
}
public static void main(String[] args) {
GenericDemo.print(1,2,3,4,5);
GenericDemo.print("a","b","c");
}
}
6、泛型總結(jié):文章來源:http://www.zghlxwxcb.cn/news/detail-816656.html
泛型代碼層面: 1): 集合 List<String> 限制集合內(nèi)元素類型 2):泛型類和泛型方法 : 提高方法或者類的靈活度 , 設(shè)計度 目的:能讓一個方法或者類 干跟多 相似的業(yè)務(wù)!??! 理論層面: 1): 繼承 : 1> 子類 繼承 泛型父類 , 1.1> 如果子類也是泛型類,那么至少要有一個標(biāo)識和父類相同 子類也可以有自己的泛型標(biāo)識 1.2> 如果子類不是泛型類,那么在繼承/實現(xiàn)的時候,就要指定 父類的泛型標(biāo)識的數(shù)據(jù)類型!??! 如果不指定,編譯器會按照 Object 處理?。?! 2): 為什么編譯會按照Object 來處理 泛型擦除:泛型 只會在 編譯的時候起作用, 在編譯完成后,JAVA虛擬機在運行時將會擦除所有的泛型標(biāo)識 , 這個時候,如果沒有給定泛型標(biāo)識的類型,那么就會按照Object處理?。?!
本電子書目錄:《Java基礎(chǔ)的重點知識點全集》文章來源地址http://www.zghlxwxcb.cn/news/detail-816656.html
到了這里,關(guān)于第8章-第1節(jié)-Java中的泛型(參數(shù)化類型)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!