精品欧美一区二区三区在线观看 _久久久久国色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)

国产资源在线免费观看| 国产精品国模在线| 中文成人无字幕乱码精品区| 波多野一区二区| 久久综合九色综合欧美就去吻| 国产精品高潮粉嫩av| 国产白丝一区二区三区 | 精品中文一区| 欧美精三区欧美精三区| 国产免费黄色一级片| 欧美女优在线| 国产精品一区二区你懂的| 欧美亚洲在线观看| 日本中文在线视频| 男男gay无套免费视频欧美| 91精品国产欧美一区二区| 欧美一级在线看| h网站久久久| 久久久久久久久久看片| 成人蜜桃视频| 91精品国产乱码久久久久| 国产一区白浆| 欧美理论电影在线播放| 国产欧美一区二区三区在线观看视频| 一区中文字幕电影| 欧美日韩色综合| 国产亚洲精品网站| 日本在线视频www鲁啊鲁| 中文一区二区在线观看| 国产一区二区黄色| 国产三级在线观看视频| 日本在线不卡一区| 欧美一级电影在线| 日本少妇裸体做爰| 欧美搞黄网站| 久久久精品国产一区二区| 国产美女免费网站| 香蕉久久夜色精品国产使用方法 | 亚洲精品国产第一综合99久久| 欧美日韩大片一区二区三区| 刘亦菲久久免费一区二区| 精品影视av免费| 国产精品青青在线观看爽香蕉 | 日韩女同一区二区三区 | 精品国产视频在线观看| 欧美综合另类| 国产亚洲精品久久久久久777| 少妇精品无码一区二区三区| 999在线精品| 日韩欧美国产麻豆| 欧美日韩理论片| 宅男噜噜噜66国产精品免费| 欧美日韩国产天堂| 孩娇小videos精品| 亚洲视频资源| 91麻豆精品国产自产在线观看一区| 波多结衣在线观看| 久久人体av| 欧美日韩aaa| 日本中文字幕观看| 榴莲视频成人app| 日韩丝袜情趣美女图片| 亚洲精品一区二区18漫画| 日本免费精品| 欧美不卡在线视频| 亚洲色图欧美日韩| 亚洲老女人视频免费| 亚洲欧美激情精品一区二区| 制服 丝袜 综合 日韩 欧美| 加勒比久久综合| 综合网日日天干夜夜久久| 久久日免费视频| 国产精品精品| 久久久久久亚洲精品不卡| 可以免费看的av毛片| 首页国产欧美久久| 国产成人自拍视频在线观看| 在线免费看91| 国产成人免费视频网站| 狠狠色狠狠色综合人人| 黄视频在线播放| 国产精品久久久久久久岛一牛影视 | 美女精品视频一区| 天天操天天射天天爽| 国产欧美日本| 国产精品天天狠天天看| 亚洲AV无码国产精品午夜字幕| av电影天堂一区二区在线| 日本中文不卡| 成人日日夜夜| 欧美日韩亚洲视频一区| 欧美女同在线观看| 精品亚洲免a| 亚洲一区av在线播放| 欧美日韩色视频| 在线综合视频| 91九色国产在线| 天堂√在线中文官网在线| 国产精品天干天干在线综合| 91网站在线观看免费| 欧美日韩国产v| 日韩精品一区二区三区视频在线观看| 日韩一级视频在线观看| 一区二区三区毛片免费| 欧美亚洲国产成人精品| 国产麻豆91视频| 久久品道一品道久久精品| 国产成人三级视频| 丝袜美腿一区| 欧美mv日韩mv亚洲| 貂蝉被到爽流白浆在线观看 | 欧美黄色片视频| 成人免费一级片| 成人黄色在线视频| 中文字幕黄色大片| 成人啊v在线| 亚洲国产古装精品网站| 一级片一级片一级片| 天堂精品中文字幕在线| 国产伦精品一区二区三区四区免费 | 天天操天天摸天天干| 狠狠狠色丁香婷婷综合久久五月| 蜜桃成人免费视频| sis001亚洲原创区| 日韩亚洲国产中文字幕欧美| 日本成人精品视频| 老司机久久99久久精品播放免费| 国产久一道中文一区| 国产最新在线| 欧美三级欧美一级| 这里只有久久精品| 99在线|亚洲一区二区| 91九色露脸| 黄色在线免费看| 欧美怡红院视频| 少妇久久久久久久久久| 在线亚洲精品| 国产精品免费一区二区| 婷婷丁香在线| 日韩亚洲欧美综合| 妺妺窝人体色www聚色窝仙踪| 精一区二区三区| 亚洲国产精品一区二区第四页av| 欧美色999| 亚洲日本中文字幕免费在线不卡| 日韩女同强女同hd| 99精品视频一区二区三区| 东北少妇不带套对白| 亚洲精品一区二区三区在线| 久久国产精彩视频| 国产精品一区二区黑人巨大| 专区另类欧美日韩| www.51色.com| 欧美激情1区| 成人免费观看网站| 欧美激情20| 亚洲男人天堂古典| 欧美激情一区二区三区免费观看| 久久久99久久| 色www免费视频| 99久久九九| 91文字幕巨乱亚洲香蕉| 激情av在线播放| 日韩成人中文字幕| 五月天激情国产综合婷婷婷| 久久久www成人免费毛片麻豆| 欧美日韩大尺度| 99热国内精品永久免费观看| 亚洲综合精品伊人久久| www成人免费观看| 亚洲人在线视频| 一级做a爱片性色毛片| 亚洲欧美另类小说| 国产伦精品一区二区免费| 久久久久久久欧美精品| 亚洲精品9999| 91精品啪在线观看国产爱臀| 5566成人精品视频免费| 成人性生交大片免费看午夜| 欧美日韩二区三区| 日本特黄一级片| 国产女同互慰高潮91漫画| 欧美日韩久久婷婷| 国产欧美精品| 一区二区不卡在线| 国产美女撒尿一区二区| 国产91免费观看| 国产在线1区| 日韩精品免费综合视频在线播放| 日韩久久久久久久久久| 亚洲精品久久嫩草网站秘色| 国产中文字幕一区二区| 久久精品国产99国产精品| 人妻少妇精品久久| 日产精品一区二区| 国产三区二区一区久久| 久久精品资源| 欧美重口另类videos人妖| 伦xxxx在线| 亚洲精品日韩在线| 亚洲影视一区二区| 大荫蒂欧美视频另类xxxx| 亚洲精品久久久久久国| 久久色中文字幕| 色诱av手机版| 精品在线播放午夜| 久久精品99国产| 欧美午夜免费影院| 亚洲一区二区三区免费看| 欧美国产极品| 99一区二区三区| 成人av色网站| 日本不卡高字幕在线2019| 最近中文字幕免费mv2018在线| 亚洲视频在线观看视频| 女人18毛片一区二区三区| 欧美酷刑日本凌虐凌虐| 日韩一级在线视频| 午夜影视日本亚洲欧洲精品| 国产97免费视频| 欧美国产乱子伦| 97伦伦午夜电影理伦片| 福利一区在线观看| 两性午夜免费视频| 六月婷婷色综合| 爆乳熟妇一区二区三区霸乳| 中文亚洲免费| 国产无限制自拍| 欧美精品日本| 在线观看免费黄色片| 色777狠狠狠综合伊人| 欧美中日韩一区二区三区| 欧美变态网站| 国产一区免费| 成人福利一区| 国产精品二区在线| 亚洲3区在线| 成人黄色片视频网站| 高清不卡一区| 91亚洲人电影| 国产一区二区三区国产精品| 成人亲热视频网站| 国产精品亚洲欧美日韩一区在线 | 成人偷拍自拍| 91在线观看网站| 亚洲一区二区电影| 国产精品久久7| 欧美三级午夜理伦三级小说| 精品高清视频| 免费成人av| 欧美日韩另类丝袜其他| 蜜桃成人av| 翔田千里亚洲一二三区| 日韩一区三区| 最新av在线免费观看| 午夜国产精品视频| 香港三级日本三级a视频| 亚洲天堂久久| 中文字幕无码精品亚洲35| 国产精品综合色区在线观看| 动漫av免费观看| 美女脱光内衣内裤视频久久影院| 午夜免费福利在线| 国产尤物一区二区| 无码人妻一区二区三区免费n鬼沢| 成人黄色大片在线观看| 狠狠人妻久久久久久综合蜜桃| 26uuu色噜噜精品一区二区| 最近中文字幕在线mv视频在线| 国产精品网站在线| 校园春色 亚洲| 黑人巨大精品欧美一区二区| 久久永久免费视频| 制服丝袜中文字幕亚洲| 日本激情视频网站| 亚洲一级黄色片| 污片在线免费观看| 日本成人黄色片| 99精品国产九九国产精品| 超碰在线97av| 国产伦精品一区二区三区千人斩| 亚洲在线不卡| 在线看片日韩| www.99在线| 国产mv日韩mv欧美| 精品国产无码在线观看| 亚洲视频免费在线| www.日本精品| 欧美高清www午色夜在线视频| 国产91绿帽单男绿奴| 中日韩美女免费视频网站在线观看| www免费在线观看| 2019国产精品自在线拍国产不卡| 福利视频一区| 韩国精品一区二区三区六区色诱| 成人精品视频| 国产精品网站免费| 韩国一区二区三区| 免费在线观看你懂的| 亚洲卡通动漫在线| 国产美女www| 精品88久久久久88久久久| 在线观看免费版| 91爱视频在线| 成人乱码手机视频| 日韩精彩视频| 99视频精品免费观看| 亚洲欧美日韩一二三区| 国产视频亚洲色图| 日本视频免费在线| 日韩欧美国产1| 午夜视频成人| 欧美做爰性生交视频| 97视频一区| 国产精品久久成人免费观看| 视频一区二区不卡| 国产精品久久久久久久无码| 亚洲欧美一区二区三区孕妇| 欧美日韩a v| 亚洲精品ady| 男人添女人下部高潮视频在线观看 | 亚洲成人在线视频播放| 9191在线播放| 国产免费成人av| 欧美日韩久久精品| 色综合av综合无码综合网站| 成人精品视频一区| 激情五月婷婷小说| 欧美二区三区91| 午夜在线免费观看视频| 国产精品久久久久久亚洲调教| 日本一区福利在线| 久久黄色片视频| 波多野结衣视频一区| 国产一级片免费| 日韩精品一区二区三区三区免费| www在线免费观看视频| 成人一区二区电影| 天天综合久久| 免费网站在线观看黄| 中文字幕一区三区| 国产又黄又粗又猛又爽| 久久久国产精彩视频美女艺术照福利| 国产成人亚洲一区二区三区| 色一情一乱一伦一区二区三欧美| 久久aⅴ乱码一区二区三区| 国产呦小j女精品视频| 黄色成人av在线| 视频二区在线| 国产成人精品午夜| 凹凸成人精品亚洲精品密奴| 毛葺葺老太做受视频| 国产精品色呦呦| 亚洲无码精品在线播放| 久久精品在线播放| 美国十次综合久久| 天堂8在线天堂资源bt| 丁香一区二区三区| 亚洲一区欧美在线| 国产偷国产偷亚洲清高网站| 蜜桃视频成人m3u8| 亚洲精品在线免费| 国产精品 欧美精品| 国产一级视频在线| 精品亚洲一区二区三区在线观看| 成人亚洲欧美| 亚洲图片小说在线| 国产在线精品不卡| 日本熟妇色xxxxx日本免费看| 日韩av影院在线观看| 你懂得影院夜精品a| 亚洲精品一区二区三区蜜桃久| 极品销魂美女一区二区三区| 欧美日韩在线观看成人| 日韩激情视频在线| 欧美精品资源| 欧美一级爱爱视频| 久久综合视频网| 亚洲一区二区天堂| 久久久久久久91| 欧美一级精品| 被黑人猛躁10次高潮视频| 欧美日韩精品二区| 日本美女在线中文版| 国产精品美女久久久久av福利| 亚洲免费网址| 中文字幕资源站| 日韩精品免费在线| 欧美电影院免费观看| 免费看的黄色大片| 亚洲免费视频中文字幕| 午夜激情小视频| 成人午夜在线影院| 欧美专区18| 久久一级黄色片| 一区二区三区天堂av| 136福利精品导航| 91n.com在线观看| 亚洲网友自拍偷拍| 在线观看麻豆蜜桃|