精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

探秘 Java 泛型:從類型參數(shù)到邊界限制與類型擦除

開發(fā)
本文深入探討了 Java 中的泛型概念及其使用方法,并給出了多個(gè)基本示例。理解和運(yùn)用泛型能增強(qiáng)程序類型安全性,消除顯式強(qiáng)制轉(zhuǎn)換需求,使代碼更具重用性和可維護(hù)性。

在 Java 編程中,大家或許都遭遇過令人頭疼的ClassCastException,尤其是在處理如Integer、String等不同類型對(duì)象時(shí)。這個(gè)異常通常是由于將對(duì)象強(qiáng)制轉(zhuǎn)換為錯(cuò)誤的數(shù)據(jù)類型所導(dǎo)致的。不過,Java 中的泛型可以幫助我們解決這一問題。

為什么我們需要泛型?

讓我們從一個(gè)簡單的例子開始。我們首先將不同類型的對(duì)象添加到一個(gè)ArrayList中。然后打印它們的值。

List list = new ArrayList();
list.add("Hello");
String str = (String) list.get(0);
System.out.println("String: " + str);

這里,我們向ArrayList添加了一個(gè)String對(duì)象。由于代碼是自己編寫,我們清楚元素類型,但編譯器并不知曉。所以從列表獲取值時(shí)得到的是Object類型,必須進(jìn)行顯式強(qiáng)制轉(zhuǎn)換。

list.add(123);
String number = (String) list.get(1);
System.out.println("Number: " + number);

如果我們向這個(gè)列表中添加一個(gè)Integer并嘗試獲取該值,我們將得到一個(gè)ClassCastException,因?yàn)镮nteger對(duì)象不能被強(qiáng)制轉(zhuǎn)換為String。 而使用泛型,就能解決上述兩個(gè)問題。使用菱形運(yùn)算符明確指定列表中保存的對(duì)象類型,可實(shí)現(xiàn)編譯時(shí)檢查,無需顯式強(qiáng)制轉(zhuǎn)換。

List<String> list = new ArrayList<>();
list.add("Hello");
String str = list.get(0); // 無需顯式強(qiáng)制轉(zhuǎn)換
System.out.println("String: " + str);
list.add(123); // 拋出編譯時(shí)錯(cuò)誤

類型參數(shù)命名約定

在前面示例中,List<String>的使用限制了列表可保存的對(duì)象類型。再看Box類處理不同類型數(shù)據(jù)的示例:

public class Box<T> {
    private T value;

    public void setValue(T value) {
        this.value = value;
    }

    public T getValue() {
        return value;
    }

    public static void main(String[] args) {
        Box<String> stringBox = new Box<>();
        stringBox.setValue("Hello, world!");
        System.out.println(stringBox.getValue());

        Box<Integer> integerBox = new Box<>();
        integerBox.setValue(123);
        System.out.println(integerBox.getValue());
    }
}

注意Box<T>類的聲明,這里T是類型參數(shù),表示Box類可處理該類型的任意對(duì)象。在main方法中創(chuàng)建Box<String>和Box<Integer>實(shí)例,確保了類型安全。

根據(jù)官方文檔,類型參數(shù)名稱通常為單個(gè)大寫字母。常見的類型參數(shù)名稱有:

  • E - 元素(廣泛用于 Java 集合框架)
  • K - 鍵
  • N - 數(shù)字
  • T - 類型
  • V - 值
  • S、U、V等 - 第二、第三、第四種類型

讓我們看看如何編寫一個(gè)泛型方法:

public static <T> void printArray(T[] inputArr) {
    for (T element : inputArr) {
        System.out.print(element + " ");
    }
    System.out.println();
}

這里,我們接受任何類型的數(shù)組并打印其元素。請注意,你需要在方法返回類型之前的尖括號(hào)<>中指定泛型類型參數(shù)T。方法體遍歷我們作為參數(shù)傳遞的任何類型T的數(shù)組,并打印每個(gè)元素。

public static void main(String[] args) {
    // 創(chuàng)建不同類型的數(shù)組(Integer、Double和Character)
    Integer[] intArr = {1, 2, 3, 4, 5};
    Double[] doubleArr = {1.1, 2.2, 3.3, 4.4, 5.5};
    Character[] charArr = {'H', 'E', 'L', 'L', 'O'};

    System.out.println("Integer數(shù)組包含:");
    printArray(intArr);   // 傳遞一個(gè)Integer數(shù)組

    System.out.println("Double數(shù)組包含:");
    printArray(doubleArr);   // 傳遞一個(gè)Double數(shù)組

    System.out.println("Character數(shù)組包含:");
    printArray(charArr);   // 傳遞一個(gè)Character數(shù)組
}

我們可以通過傳遞不同類型的數(shù)組(Integer、Double、Character)來調(diào)用這個(gè)泛型方法,你會(huì)看到你的程序?qū)⒋蛴〕鲞@些數(shù)組的每個(gè)元素。

泛型的限制

在泛型中,我們使用邊界來限制泛型類、接口或方法可以接受的類型。有兩種類型:

1. 上界

這用于將泛型類型限制為上限。要定義上界,你使用extends關(guān)鍵字。通過指定上界,你確保類、接口或方法接受指定的類型及其所有子類。 語法如下:<T extends SuperClass>。例如,修改Box類:

class Box<T extends Number> {
    private T value;

    public void setValue(T value) {
        this.value = value;
    }

    public T getValue() {
        return value;
    }
}

在這個(gè)例子中,T可以是任何擴(kuò)展Number的類型,如Integer、Double或Float。

2. 下界

這用于將泛型類型限制為下限。要定義下界,你使用super關(guān)鍵字。通過指定下界,你確保類、接口或方法接受指定的類型及其所有超類。 語法如下:<T super SubClass>。以下是使用下界的示例:

public static void printList(List<? super Integer> list) {
    for (Object element : list) {
        System.out.print(element + " ");
    }
    System.out.println();
}

下界<? super Integer>的使用確保你可以將指定的類型及其所有超類(在這種情況下是Integer、Number或Object的列表)傳遞給printList方法。

什么是通配符?

你在上一個(gè)示例中看到的?被稱為通配符。你可以使用它們來引用未知類型。你可以使用帶有上界的通配符,在這種情況下它看起來像這樣:<? extends Number>。它也可以與下界一起使用,如<? super Integer>。

類型擦除

我們在類、接口或方法中使用的泛型類型僅在編譯時(shí)可用,并且在運(yùn)行時(shí)會(huì)被刪除。這樣做是為了確保向后兼容性,因?yàn)榕f版本的Java(Java 1.5之前)不支持它。 編譯器利用泛型類型信息確保類型安全。類型擦除過程如下:

  • 對(duì)于有界泛型類型,編譯器會(huì)將其擦除為它的上界類型。例如,class Box<T extends Number>,T會(huì)被擦除為Number。
  • 對(duì)于無界泛型類型(如class Box<T>),T會(huì)被擦除為Object。所以在運(yùn)行時(shí),實(shí)際上并不能獲取到泛型參數(shù)的具體類型信息。
import java.util.ArrayList;
import java.util.List;
class GenericExample<T> {
    private List<T> list = new ArrayList<>();
    public void add(T element) {
        list.add(element);
    }
    public T get(int index) {
        return list.get(index);
    }
}

當(dāng)編譯器編譯這段代碼時(shí),T會(huì)被擦除。對(duì)于add方法,實(shí)際上變成了類似public void add(Object element)(如果T是無界的)。對(duì)于get方法,返回值類型也被擦除為Object,不過編譯器會(huì)在需要的時(shí)候插入強(qiáng)制類型轉(zhuǎn)換。

結(jié)論

本文深入探討了 Java 中的泛型概念及其使用方法,并給出了多個(gè)基本示例。理解和運(yùn)用泛型能增強(qiáng)程序類型安全性,消除顯式強(qiáng)制轉(zhuǎn)換需求,使代碼更具重用性和可維護(hù)性。希望通過本文的介紹,大家能在 Java 編程中更好地運(yùn)用泛型,提升代碼質(zhì)量。

責(zé)任編輯:趙寧寧 來源: 程序猿技術(shù)充電站
相關(guān)推薦

2023-03-24 15:53:24

JavaJava 泛型開發(fā)

2024-06-07 10:05:31

2023-04-10 16:34:45

編程Java開發(fā)

2011-04-13 09:16:55

泛型

2009-08-24 14:51:25

C# 泛型泛型類型

2021-08-24 08:05:41

泛型類型擦除Class

2022-03-02 14:41:03

泛型反序列化

2025-05-30 02:31:00

2025-03-26 01:45:00

泛型C#開發(fā)者

2020-12-21 16:18:07

JavaTypeToken泛型擦除

2022-06-19 22:54:08

TypeScript泛型工具

2009-09-08 16:36:10

LINQ查詢基于泛型類

2009-04-24 09:33:12

LINQ查詢非泛型

2021-07-01 06:47:30

Java泛型泛型擦除

2023-03-06 08:33:24

IDEA反編譯類型

2009-08-24 14:20:13

C# 強(qiáng)制類型轉(zhuǎn)換

2024-11-05 09:11:09

TypeScript開發(fā)者代碼

2013-03-20 09:27:33

C#泛型

2024-03-06 08:17:18

Java泛型安全

2021-07-29 09:20:18

Java泛型String
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

日韩美女一区二区三区| 国产拍欧美日韩视频二区| 久久在线视频在线| 日本69式三人交| 625成人欧美午夜电影| 中文字幕欧美三区| 99热在线播放| 97人妻一区二区精品视频| 欧美国产美女| 亚洲娇小xxxx欧美娇小| av网站在线不卡| √8天堂资源地址中文在线| 久久精品亚洲国产奇米99| 国产精品吴梦梦| 国产精品111| 日韩毛片视频| 日韩大片在线观看视频| 在线观看免费的av| 亚洲v.com| 亚洲欧洲综合另类在线| 免费毛片一区二区三区久久久| ,亚洲人成毛片在线播放| 99精品视频免费观看视频| 色噜噜狠狠狠综合曰曰曰| 波多野结衣有码| 国产aa精品| 在线观看日韩毛片| 凹凸国产熟女精品视频| 影音先锋男人在线资源| 国产精品理论在线观看| 欧美日韩亚洲在线| 亚洲精品中文字幕成人片| 久久99热狠狠色一区二区| 日本成人免费在线| 日韩视频免费观看高清| 在线成人激情| 日韩最新在线视频| aaaaa一级片| 岛国av一区| 日韩精品专区在线影院重磅| 亚欧激情乱码久久久久久久久| 中文字幕一区久| 亚洲亚洲精品在线观看| 无码毛片aaa在线| av在线播放网| 久久精品欧美一区二区三区不卡 | 日本天堂网在线| 一区在线视频观看| 欧美激情第一页xxx| 黄视频网站免费看| 天天射天天综合网| 日韩在线播放一区| 国产高清视频免费在线观看| 成人毛片免费看| 一区二区三区视频免费| 日本成人免费视频| 精品99久久| 一本色道久久88综合亚洲精品ⅰ | 456国产精品| 日韩成人在线免费视频| 亚洲国产欧美国产综合一区| 国内偷自视频区视频综合| 久久精品久久国产| 日韩天天综合| 欧美性视频网站| 日本黄色一级视频| 美女脱光内衣内裤视频久久网站 | 97久久人国产精品婷婷| 激情综合色综合久久综合| 91亚洲精品一区| 精品国自产在线观看| 国产成人鲁色资源国产91色综| 成人免费淫片视频软件| av中文在线观看| 福利电影一区二区| 久久99精品久久久久久三级| 精品无吗乱吗av国产爱色| 国产拍欧美日韩视频二区| 亚洲国产一区二区精品视频| 激情在线小视频| 一区二区日韩av| 国产乱子伦农村叉叉叉| 欧美大片免费高清观看| 91精品一区二区三区在线观看| 日本中文字幕精品| 偷拍一区二区| 色老头一区二区三区| 久久久久久蜜桃| 性欧美暴力猛交另类hd| 国产日韩欧美另类| 亚洲卡一卡二卡三| 久久久久久久久伊人| 一区二区视频在线观看| 久草在线资源站资源站| 色婷婷亚洲精品| 日本r级电影在线观看| 神马日本精品| 久久中文字幕在线视频| 久久草视频在线| 久久国产视频网| 激情视频在线观看一区二区三区| 成年网站在线| 亚洲国产精品欧美一二99| 九九九在线观看视频| 91午夜精品| 在线日韩中文字幕| 日韩免费一级片| 久久99精品久久久久久国产越南 | 欧美性受xxxx黑人猛交| 97超碰人人模人人人爽人人爱| 99久久久久久| 97超碰人人爱| 欧美日韩五区| 日韩av一区二区在线| 美女视频久久久| 免费日韩av| wwwxx欧美| 亚洲s色大片| 色综合色狠狠天天综合色| 色男人天堂av| 久久精品av| 日韩美女免费视频| 成人免费观看在线视频| 国产精品久久久久四虎| 无码人妻丰满熟妇区五十路百度| 伊人久久亚洲| 久久综合色88| 亚洲天堂中文字幕在线| 久久精品人人爽人人爽| 久久国产成人精品国产成人亚洲| 9l视频自拍九色9l视频成人| 久久韩剧网电视剧| 性色av一区二区三区四区| 91在线视频播放地址| 国产成人艳妇aa视频在线| 亚洲美女色播| 色哟哟网站入口亚洲精品| 久久久黄色大片| www一区二区| 亚洲 自拍 另类小说综合图区| 免费一级欧美在线大片| 久久久精品视频在线观看| 在线免费观看高清视频| 国产精品人成在线观看免费 | 中文在线最新版地址| 精品国产a毛片| 久久久精品91| 成人永久免费视频| www.欧美黄色| 高潮按摩久久久久久av免费| 欧美激情一级欧美精品| 国内爆初菊对白视频| 亚洲午夜av在线| 精品人妻一区二区免费| 日韩午夜av在线| 蜜桃999成人看片在线观看| 中文字幕乱码中文乱码51精品| 亚洲风情亚aⅴ在线发布| 麻豆一区二区三区精品视频| av网站一区二区三区| 日韩中文字幕在线视频观看| 欧洲vs亚洲vs国产| 欧美最顶级的aⅴ艳星| 美女欧美视频在线观看免费 | 亚洲欧美中日韩| 日韩av自拍偷拍| 在线中文字幕亚洲| 丁香五月网久久综合| 9999在线视频| 亚洲欧美日韩直播| 涩涩视频在线观看| 亚洲精品视频在线| av在线天堂网| 午夜一区二区三区不卡视频| 日本午夜精品一区二区三区| 色诱色偷偷久久综合| 欧美老女人xx| 深夜福利在线观看直播| 欧洲日韩一区二区三区| 天海翼在线视频| 国产.精品.日韩.另类.中文.在线.播放 | 五月婷婷丁香网| 色综合激情五月| 99久久99久久精品免费看小说.| 国产自产v一区二区三区c| 久久亚洲精品无码va白人极品| 视频小说一区二区| 国产精品中文字幕久久久| 伊人222成人综合网| 国产视频精品免费播放| 国产精品系列视频| 午夜精品久久久久久久99水蜜桃| 亚洲无人区码一码二码三码的含义| 蜜桃精品视频在线观看| 男女日批视频在线观看| 日韩精品影视| 麻豆91蜜桃| 久久久久亚洲精品中文字幕| 日韩免费视频在线观看| 1区2区在线观看| 亚洲图片在区色| av在线资源观看| 欧美无砖砖区免费| 日韩成人高清视频| 亚洲美女精品一区| 99久久久无码国产精品衣服| 丁香一区二区三区| 中文字幕在线视频精品| 久久国产精品久久w女人spa| 美女av免费观看| 日韩精品欧美| 蜜桃导航-精品导航| 91久久偷偷做嫩草影院电| 国产免费一区二区三区在线观看| 一区二区三区短视频| 久久久久国产一区二区三区| 免费av不卡| 中文字幕日韩欧美精品在线观看| 色猫av在线| 亚洲福利视频久久| 亚洲精品久久久蜜桃动漫| 欧美日韩mp4| 国产情侣免费视频| 色婷婷香蕉在线一区二区| 日韩女优在线观看| 亚洲午夜羞羞片| 欧美激情国产精品免费| 亚洲欧美日韩国产另类专区| 日本女人性生活视频| 国产色产综合色产在线视频| aaaaa一级片| 2014亚洲片线观看视频免费| av2014天堂网| heyzo一本久久综合| 伦理片一区二区| 国产成人av电影免费在线观看| 在线视频日韩欧美| 美国毛片一区二区三区| av五月天在线| 日日夜夜精品视频天天综合网| 欧美一级视频免费看| 亚洲黄页一区| 大陆av在线播放| 欧美日韩中文| 美女黄色免费看| 欧美激情1区2区| 91社在线播放| 欧美成人首页| 久久av高潮av| 欧美精品成人| 福利视频一区二区三区四区| 欧美另类专区| 国产精品69久久久| 亚洲免费大片| 日本在线xxx| av不卡在线| 妓院一钑片免看黄大片| 国产精品久久久一区二区| 五十路熟女丰满大屁股| 久久伦理在线| 国产又粗又猛又爽又黄的网站| 天天影视欧美综合在线观看| 大桥未久一区二区| 欧美日韩精品| 国精产品一区一区三区视频| 亚洲久色影视| 国产精品久久久久9999小说| 麻豆国产精品777777在线| 少妇一级淫免费播放| 国产成人av电影在线| 视频免费在线观看| 91亚洲精品久久久蜜桃| 公肉吊粗大爽色翁浪妇视频| 国产精品久久久久久久久免费桃花 | 最近2019中文字幕一页二页| 中文日本在线观看| 欧美xxxx做受欧美| caoporn视频在线| 国产999视频| 欧美大陆国产| 不卡一区二区三区视频| 久久91精品| 中文字幕乱码一区二区三区| 欧美激情综合| 国产精彩免费视频| 国产在线精品一区二区不卡了| 国产裸体视频网站| 国产mv日韩mv欧美| 久久国产柳州莫菁门| 亚洲精选免费视频| 男人天堂中文字幕| 欧美日韩高清一区二区| www.久久成人| 亚洲精品自拍第一页| 黄视频在线观看网站| 91成人福利在线| 欧美高清免费| 欧美亚洲国产免费| 雨宫琴音一区二区三区| 97超碰人人澡| 青椒成人免费视频| 风韵丰满熟妇啪啪区老熟熟女| 欧美激情一区二区三区全黄| 免费在线黄色片| 在线观看不卡一区| 天堂中文在线观看视频| 日韩在线播放av| 中文字幕在线官网| 超碰在线97av| 欧美黄色录像片| 91视频最新入口| 成人国产视频在线观看| 中文字幕第69页| 婷婷一区二区三区| 精品国产九九九| 亚洲午夜av久久乱码| 国产天堂在线播放视频| 91精品综合视频| 蜜臀91精品国产高清在线观看| 国产一二三四五| 麻豆国产欧美日韩综合精品二区| 91av在线免费| 亚洲制服丝袜一区| 国产黄色大片网站| 色视频www在线播放国产成人| 欧美极度另类| 国产偷国产偷亚洲高清97cao| 国产大片一区| 九九热精品国产| 国产精品免费av| 欧美男人亚洲天堂| 亚洲黄页视频免费观看| 日本中文字幕中出在线| 国产精品香蕉国产| 欧美精美视频| 国产成人精品无码播放| av亚洲精华国产精华精| 国产一级在线播放| 欧美videossexotv100| 国产秀色在线www免费观看| 琪琪第一精品导航| 欧美激情在线免费| 国产黄色一级网站| 久久久国产午夜精品| 日产精品久久久| 亚洲国产精品久久精品怡红院| 免费在线看污片| 97超级碰碰| 99久久久久久中文字幕一区| 在线能看的av网站| 国产精品久久国产精麻豆99网站| 一区二区精品视频在线观看| 在线观看日韩视频| 国产精品99久久久久久董美香| 亚洲精品8mav| 久久99久久99精品免视看婷婷| 亚洲精品乱码久久久久久久久久久久| 色婷婷综合久久久| 国产三级电影在线观看| 国产成人精品国内自产拍免费看 | 亚洲精品二三区| av今日在线| 日本中文不卡| 久久精品国内一区二区三区| 熟女少妇a性色生活片毛片| 91精品国产色综合久久不卡蜜臀| 久cao在线| 国产伦精品一区二区三区免费视频| 亚洲国产一区二区三区高清| 亚洲成人福利视频| 亚洲午夜电影网| 亚洲日本中文字幕在线| 国产精品美女在线观看| 天天做天天爱天天综合网| 国产精品一级无码| 福利视频导航一区| 国产片在线观看| 成人免费看片网址| 久久国产主播| 成人信息集中地| 亚洲国产另类 国产精品国产免费| 午夜伦理福利在线| 中文字幕在线亚洲三区| 国产精品2024| 久久久久久久极品| 日韩亚洲精品视频| 97品白浆高清久久久久久| 精品久久久噜噜噜噜久久图片| 中文字幕一区二区视频| 国产精品久久久久久久久久久久久久久久 | 国产精品网站视频| 黄色成人精品网站| 加勒比一区二区| 欧美va在线播放| 影视一区二区三区| 女人床在线观看| 国产精品久久久久一区| 免费国产黄色片| 92国产精品久久久久首页| 亚洲经典在线|