溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java泛型的上界和下界通配符怎么使用

發(fā)布時(shí)間:2023-04-04 14:41:06 來源:億速云 閱讀:98 作者:iii 欄目:開發(fā)技術(shù)

今天小編給大家分享一下Java泛型的上界和下界通配符怎么使用的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

上界

泛型的上界指定了類型參數(shù)必須是某個(gè)類的子類或者實(shí)現(xiàn)了某個(gè)接口。它的語法形式為 T extends B,其中T是泛型類型參數(shù),B是上界類型。例如,下面的代碼展示了一個(gè)泛型類 Box,它的類型參數(shù)T必須是 Number 或其子類:

public class Box<T extends Number> {
    private T value;
    public Box(T value) {
        this.value = value;
    }
    public T getValue() {
        return value;
    }
}

在上面的代碼中,我們使用了 extends 關(guān)鍵字來指定泛型類型參數(shù)的上界類型,這意味著泛型類型參數(shù)必須是 Number 或其子類。這樣,我們就可以使用 Box 類來存儲(chǔ) Integer、DoubleFloat 等類型的值,因?yàn)樗鼈兌际?Number 的子類。另外,通過使用泛型的上界,我們可以確保 Box 類的實(shí)例中只存儲(chǔ) Number 類型的值,避免了類型轉(zhuǎn)換異常的風(fēng)險(xiǎn)。

在使用泛型的時(shí)候,如果我們傳入一個(gè)類型不符合上界限制的參數(shù),則會(huì)在編譯時(shí)發(fā)生錯(cuò)誤,例如:

Box<String> box = new Box<>("Hello World");    // 編譯錯(cuò)誤:String 不是 Number 的子類

下界

泛型的下界指定了類型參數(shù)必須是某個(gè)類的超類或者是某個(gè)接口的實(shí)現(xiàn)類。它的語法形式為 T super B,其中T是泛型類型參數(shù),B是下界類型。下面是一個(gè)示例,展示了一個(gè)泛型類 Box,它的類型參數(shù)T必須是 Object 或其超類:

public class Box<T super Object> {
    private T value;
    public Box(T value) {
        this.value = value;
    }
    public T getValue() {
        return value;
    }
}

在上面的代碼中,我們使用了 super 關(guān)鍵字來指定泛型類型參數(shù)的下界類型,這意味著泛型類型參數(shù)必須是 Object 或其超類。這樣,我們就可以使用 Box 類來存儲(chǔ) Object、StringInteger、Double 等類型的值,因?yàn)樗鼈兌际?Object 的子類。另外,通過使用泛型的下界,我們可以確保 Box 類的實(shí)例中存儲(chǔ)的值都是 Object 類型,避免了類型轉(zhuǎn)換異常的風(fēng)險(xiǎn)。

在使用泛型的時(shí)候,如果我們傳入一個(gè)類型不符合下界限制的參數(shù),則會(huì)在編譯時(shí)發(fā)生錯(cuò)誤,例如:

Box<Integer> box = new Box<>(123);    // 編譯錯(cuò)誤:Integer 不是 Object 的超類

上下界通配符

有時(shí)候,我們需要在泛型中同時(shí)使用上界和下界的限制,此時(shí)可以使用通配符 ? 來表示未知類型。例如,下面的代碼展示了一個(gè)泛型方法 copy,它可以將一個(gè)數(shù)組的元素復(fù)制到另一個(gè)數(shù)組中:

public static <T> void copy(List<? extends T> src, List<? super T> dest) {
    for (T t : src) {
        dest.add(t);
    }
}

在上面的代碼中,我們使用了通配符 ? 來表示未知類型,它可以同時(shí)滿足 src 參數(shù)是 T 類型或其子類,dest 參數(shù)是 T 類型或其超類的限制條件。這樣,我們就可以將任意類型的元素復(fù)制到另一個(gè)列表中了。通過使用上下界通配符,我們可以更加靈活地定義泛型方法,同時(shí)保證類型安全。

以上就是“Java泛型的上界和下界通配符怎么使用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI