成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Java泛型全解析

shixinzhang / 3166人閱讀

摘要:把一個(gè)對(duì)象放進(jìn)集合中之后,集合就會(huì)忘記這個(gè)對(duì)象的數(shù)據(jù)類型,當(dāng)再次取出該對(duì)象時(shí),該對(duì)象的編譯類型就變成類型了為了解決上面的問(wèn)題,就引出了泛型這一個(gè)概念泛型接口和類蘋果可以靈活的封裝,并且同時(shí)有可以限定類型,泛型的接口和類更像是一種通用的模型,

把一個(gè)對(duì)象放進(jìn)集合中之后,集合就會(huì)忘記這個(gè)對(duì)象的數(shù)據(jù)類型,當(dāng)再次取出該對(duì)象時(shí),該對(duì)象的編譯類型就變成Object類型了

為了解決上面的問(wèn)題,就引出了泛型這一個(gè)概念

泛型接口和類
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());
    }
}

可以靈活的封裝,并且同時(shí)有可以限定類型,泛型的接口和類更像是一種通用的模型,模型內(nèi)部的類型由使用者自己限定

無(wú)論為泛型的類型形參傳入哪一種類型的實(shí)參,對(duì)于Java來(lái)說(shuō),他們依然被當(dāng)成同一個(gè)類處理,在內(nèi)存中也只占用一塊內(nèi)存空間,因此在靜態(tài)方法、靜態(tài)初始化塊或者靜態(tài)變量的聲明和初始化中不允許使用類型形參

泛型接口和類的子類
public class Apple extends Fruit{

    public Apple(String info) {
        super(info);
    }

    @Override
    public String getInfo() {
        return super.getInfo();
    }

}

使用泛型接口或類的時(shí)候,雖然可以不加<>部分,但是推薦加上,不然還要強(qiáng)制類型轉(zhuǎn)換等麻煩操作

重寫父類方法或者實(shí)現(xiàn)接口的時(shí)候,返回值一定要跟父類(接口)一致

設(shè)定類型形參的上限
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());
    }
}

可以有多個(gè)限定條件,存在多個(gè)限定條件的時(shí)候,使用&連接

至多一個(gè)父類上限,多個(gè)接口上限

接口上限要在類上線后面

類型通配符

使用類型通配符的類是各種該類的泛型的父類

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以后可以使用菱形語(yǔ)法,在構(gòu)造器后不需要完整的泛型信息

"?"用于操作具體的某個(gè)泛型類的時(shí)候,還未確定最終使用時(shí),采用的對(duì)象類型,就用問(wèn)號(hào)作為占位的含義

通配符的上限設(shè)定
Fruit intg = new Fruit<>("1");

使用extends的方式限定?必須是String類型或者是其子類類型

通配符的下限設(shè)定
    static  void getCollection(Fruitb){
        System.out.println(b);
    }

一定要是T或者T的父類

泛型方法
修飾符返回值類型 方法名(形參列表){

    方法體

}
static  void getCollection(B[]b,Collection c){
        
}

多個(gè)類型形參之間用逗號(hào)分隔

所有類型形參聲明放在修飾符和方法返回類型之間

方法中定義的類型形參只能在該方法里使用,而接口或類中定義的類型形參可以在整個(gè)接口、類中使用

方法中的泛型參數(shù)無(wú)需顯式傳入實(shí)際類型參數(shù)

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"});
    }
}

存在泛型構(gòu)造器,不能使用”菱形“語(yǔ)法

    public  Fruit(T info) {
        System.out.println(info);
    }
泛型方法與類型通配符的區(qū)別

泛型方法允許類型形參被用來(lái)表示方法的一個(gè)或多個(gè)參數(shù)之間的類型依賴關(guān)系,或者方法返回值與參數(shù)之間的類型依賴關(guān)系,如果沒(méi)有這樣的類型依賴關(guān)系,就不應(yīng)該使用泛型方法

類型通配符既可以在方法簽名中定義形參的類型,也可以用于定義變量類型,但泛型方法中的類型形參必須在對(duì)應(yīng)方法中顯式聲明

擦除和轉(zhuǎn)換

擦除

當(dāng)把一個(gè)具有泛型信息的對(duì)象賦值給另一個(gè)沒(méi)有泛型信息的變量時(shí),尖括號(hào)中的泛型信息就會(huì)被擦除扔掉

轉(zhuǎn)換

當(dāng)把一個(gè)沒(méi)有泛型信息的對(duì)象賦值給另一個(gè)泛型信息的變量時(shí),不會(huì)發(fā)生報(bào)錯(cuò),會(huì)自動(dòng)轉(zhuǎn)換

更多內(nèi)容可以關(guān)注微信公眾號(hào),或者訪問(wèn)AppZone網(wǎng)站

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/65988.html

相關(guān)文章

  • Java開發(fā)

    摘要:大多數(shù)待遇豐厚的開發(fā)職位都要求開發(fā)者精通多線程技術(shù)并且有豐富的程序開發(fā)調(diào)試優(yōu)化經(jīng)驗(yàn),所以線程相關(guān)的問(wèn)題在面試中經(jīng)常會(huì)被提到。將對(duì)象編碼為字節(jié)流稱之為序列化,反之將字節(jié)流重建成對(duì)象稱之為反序列化。 JVM 內(nèi)存溢出實(shí)例 - 實(shí)戰(zhàn) JVM(二) 介紹 JVM 內(nèi)存溢出產(chǎn)生情況分析 Java - 注解詳解 詳細(xì)介紹 Java 注解的使用,有利于學(xué)習(xí)編譯時(shí)注解 Java 程序員快速上手 Kot...

    LuDongWei 評(píng)論0 收藏0
  • java篇 - 收藏集 - 掘金

    摘要:進(jìn)階多線程開發(fā)關(guān)鍵技術(shù)后端掘金原創(chuàng)文章,轉(zhuǎn)載請(qǐng)務(wù)必將下面這段話置于文章開頭處保留超鏈接。關(guān)于中間件入門教程后端掘金前言中間件 Java 開發(fā)人員最常犯的 10 個(gè)錯(cuò)誤 - 后端 - 掘金一 、把數(shù)組轉(zhuǎn)成ArrayList 為了將數(shù)組轉(zhuǎn)換為ArrayList,開發(fā)者經(jīng)常... Java 9 中的 9 個(gè)新特性 - 后端 - 掘金Java 8 發(fā)布三年多之后,即將快到2017年7月下一個(gè)版...

    OpenDigg 評(píng)論0 收藏0
  • java

    摘要:多線程編程這篇文章分析了多線程的優(yōu)缺點(diǎn),如何創(chuàng)建多線程,分享了線程安全和線程通信線程池等等一些知識(shí)。 中間件技術(shù)入門教程 中間件技術(shù)入門教程,本博客介紹了 ESB、MQ、JMS 的一些知識(shí)... SpringBoot 多數(shù)據(jù)源 SpringBoot 使用主從數(shù)據(jù)源 簡(jiǎn)易的后臺(tái)管理權(quán)限設(shè)計(jì) 從零開始搭建自己權(quán)限管理框架 Docker 多步構(gòu)建更小的 Java 鏡像 Docker Jav...

    honhon 評(píng)論0 收藏0
  • Java泛型進(jìn)階 - 如何取出泛型類型參數(shù)

    摘要:然而,與普遍印象相反的是,某些情況下在運(yùn)行時(shí)獲取到泛型類型信息也是可行的。于是,編譯器可以把這部分泛型信息父類的泛型參數(shù)是,存儲(chǔ)在它的子類的字節(jié)碼區(qū)域中。當(dāng)使用反射取出中的類型參數(shù)時(shí),就必須把這點(diǎn)納入考量。獲取嵌套類的泛型的代碼如下 在JDK5引入了泛型特性之后,她迅速地成為Java編程中不可或缺的元素。然而,就跟泛型乍一看似乎非常容易一樣,許多開發(fā)者也非常容易就迷失在這項(xiàng)特性里。多數(shù)...

    linkFly 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<