亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Java泛型全解析

shixinzhang / 3226人閱讀

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

把一個對象放進(jìn)集合中之后,集合就會忘記這個對象的數(shù)據(jù)類型,當(dāng)再次取出該對象時,該對象的編譯類型就變成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());
    }
}

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

無論為泛型的類型形參傳入哪一種類型的實參,對于Java來說,他們依然被當(dāng)成同一個類處理,在內(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();
    }

}

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

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

設(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());
    }
}

可以有多個限定條件,存在多個限定條件的時候,使用&連接

至多一個父類上限,多個接口上限

接口上限要在類上線后面

類型通配符

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

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

"?"用于操作具體的某個泛型類的時候,還未確定最終使用時,采用的對象類型,就用問號作為占位的含義

通配符的上限設(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){
        
}

多個類型形參之間用逗號分隔

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

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

方法中的泛型參數(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)造器,不能使用”菱形“語法

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

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

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

擦除和轉(zhuǎn)換

擦除

當(dāng)把一個具有泛型信息的對象賦值給另一個沒有泛型信息的變量時,尖括號中的泛型信息就會被擦除扔掉

轉(zhuǎn)換

當(dāng)把一個沒有泛型信息的對象賦值給另一個泛型信息的變量時,不會發(fā)生報錯,會自動轉(zhuǎn)換

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

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

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/65988.html

Failed to recv the data from server completely (SIZE:0/8, REASON:closed)