摘要:把一個對象放進集合中之后,集合就會忘記這個對象的數據類型,當再次取出該對象時,該對象的編譯類型就變成類型了為了解決上面的問題,就引出了泛型這一個概念泛型接口和類蘋果可以靈活的封裝,并且同時有可以限定類型,泛型的接口和類更像是一種通用的模型,
把一個對象放進集合中之后,集合就會忘記這個對象的數據類型,當再次取出該對象時,該對象的編譯類型就變成Object類型了
為了解決上面的問題,就引出了泛型這一個概念
泛型接口和類public class Fruit{ private T info; public Fruit(T info) { this.info = info; } public T getInfo() { return info; } public void setInfo(T info) { this.info = info; } public static void main(String[] args) { Fruit lt = new Fruit ("蘋果"); System.out.println(lt.getInfo()); Fruit intg = new Fruit (1); System.out.println(intg.getInfo()); } }
泛型接口和類的子類可以靈活的封裝,并且同時有可以限定類型,泛型的接口和類更像是一種通用的模型,模型內部的類型由使用者自己限定
無論為泛型的類型形參傳入哪一種類型的實參,對于Java來說,他們依然被當成同一個類處理,在內存中也只占用一塊內存空間,因此在靜態方法、靜態初始化塊或者靜態變量的聲明和初始化中不允許使用類型形參
public class Apple extends Fruit{ public Apple(String info) { super(info); } @Override public String getInfo() { return super.getInfo(); } }
使用泛型接口或類的時候,雖然可以不加<>部分,但是推薦加上,不然還要強制類型轉換等麻煩操作
重寫父類方法或者實現接口的時候,返回值一定要跟父類(接口)一致
設定類型形參的上限public class Fruit{ private T info; public Fruit(T info) { this.info = info; } public T getInfo() { return info; } public void setInfo(T info) { this.info = info; } public static void main(String[] args) { Fruit lt = new Fruit<>("蘋果"); System.out.println(lt.getInfo()); Fruit> intg = new Fruit<>("1"); System.out.println(intg.getInfo()); } }
可以有多個限定條件,存在多個限定條件的時候,使用&連接
至多一個父類上限,多個接口上限
接口上限要在類上線后面
類型通配符使用類型通配符的類是各種該類的泛型的父類
public class Fruit{ private T info; public Fruit(T info) { this.info = info; } public T getInfo() { return info; } public void setInfo(T info) { this.info = info; } public static void main(String[] args) { Fruit lt = new Fruit<>("蘋果"); System.out.println(lt.getInfo()); Fruit> intg = new Fruit<>(1); System.out.println(intg.getInfo()); } }
在Java 7以后可以使用菱形語法,在構造器后不需要完整的泛型信息
"?"用于操作具體的某個泛型類的時候,還未確定最終使用時,采用的對象類型,就用問號作為占位的含義
通配符的上限設定Fruit extends String> intg = new Fruit<>("1");
使用extends的方式限定?必須是String類型或者是其子類類型
通配符的下限設定staticvoid getCollection(Fruit super T>b){ System.out.println(b); }
一定要是T或者T的父類
泛型方法修飾符返回值類型 方法名(形參列表){ 方法體 }
staticvoid getCollection(B[]b,Collection c){ }
多個類型形參之間用逗號分隔
所有類型形參聲明放在修飾符和方法返回類型之間
方法中定義的類型形參只能在該方法里使用,而接口或類中定義的類型形參可以在整個接口、類中使用
方法中的泛型參數無需顯式傳入實際類型參數
public class Fruit{ private T info; public Fruit(T info) { this.info = info; } static void getCollection(B[]b){ System.out.println(b); } public T getInfo() { return info; } public void setInfo(T info) { this.info = info; } public static void main(String[] args) { Fruit.getCollection(new String[]{"1"}); } }
存在泛型構造器,不能使用”菱形“語法
public泛型方法與類型通配符的區別Fruit(T info) { System.out.println(info); }
泛型方法允許類型形參被用來表示方法的一個或多個參數之間的類型依賴關系,或者方法返回值與參數之間的類型依賴關系,如果沒有這樣的類型依賴關系,就不應該使用泛型方法
類型通配符既可以在方法簽名中定義形參的類型,也可以用于定義變量類型,但泛型方法中的類型形參必須在對應方法中顯式聲明
擦除和轉換擦除
當把一個具有泛型信息的對象賦值給另一個沒有泛型信息的變量時,尖括號中的泛型信息就會被擦除扔掉
轉換
當把一個沒有泛型信息的對象賦值給另一個泛型信息的變量時,不會發生報錯,會自動轉換
更多內容可以關注微信公眾號,或者訪問AppZone網站
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/65988.html
摘要:進階多線程開發關鍵技術后端掘金原創文章,轉載請務必將下面這段話置于文章開頭處保留超鏈接。關于中間件入門教程后端掘金前言中間件 Java 開發人員最常犯的 10 個錯誤 - 后端 - 掘金一 、把數組轉成ArrayList 為了將數組轉換為ArrayList,開發者經常... Java 9 中的 9 個新特性 - 后端 - 掘金Java 8 發布三年多之后,即將快到2017年7月下一個版...
摘要:然而,與普遍印象相反的是,某些情況下在運行時獲取到泛型類型信息也是可行的。于是,編譯器可以把這部分泛型信息父類的泛型參數是,存儲在它的子類的字節碼區域中。當使用反射取出中的類型參數時,就必須把這點納入考量。獲取嵌套類的泛型的代碼如下 在JDK5引入了泛型特性之后,她迅速地成為Java編程中不可或缺的元素。然而,就跟泛型乍一看似乎非常容易一樣,許多開發者也非常容易就迷失在這項特性里。多數...
閱讀 966·2021-11-24 09:39
閱讀 3391·2021-10-27 14:20
閱讀 2325·2019-08-30 14:08
閱讀 3366·2019-08-29 16:34
閱讀 2181·2019-08-26 12:14
閱讀 2108·2019-08-26 11:54
閱讀 2777·2019-08-26 11:44
閱讀 2479·2019-08-26 11:38