最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java 泛型詳解之類型參數(shù)的力量(最新推薦)

 更新時(shí)間:2025年10月30日 14:32:32   作者:ZHE|張恒  
本文系統(tǒng)講解了Java泛型的定義、使用、通配符、邊界及常見陷阱,強(qiáng)調(diào)了泛型在Java編程中的重要性,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧

泛型(Generics)是 Java 類型系統(tǒng)的重要支柱。
它讓代碼更安全、更簡潔、更通用,是理解現(xiàn)代 Java 編程的必修課。
本文將系統(tǒng)講解 Java 泛型的定義、使用、通配符、邊界與常見陷阱。

一、為什么需要泛型

在 Java 1.5 之前,集合只能存放 Object 類型:

List list = new ArrayList();
list.add("Hello");
list.add(123); // 不安全
String s = (String) list.get(0); // 強(qiáng)制類型轉(zhuǎn)換

缺點(diǎn):類型不安全、容易出錯(cuò)。

Java 1.5 引入 泛型機(jī)制(Generics),允許在定義類或方法時(shí)引入“類型參數(shù)”。

List<String> list = new ArrayList<>();
list.add("Hello");
// list.add(123); // 編譯錯(cuò)誤
String s = list.get(0); // 無需強(qiáng)轉(zhuǎn)

二、泛型的基本語法

class Box<T> {          // 定義泛型類
    private T value;
    public void set(T value) { this.value = value; }
    public T get() { return value; }
}
Box<Integer> box = new Box<>();
box.set(100);
Integer data = box.get();
關(guān)鍵點(diǎn)說明
<T>聲明類型參數(shù)(Type Parameter)
T類型變量,可代表任意引用類型
Box<Integer>實(shí)例化泛型類

三、泛型類與泛型接口

泛型類

class Pair<K, V> {
    private K key;
    private V value;
    public Pair(K key, V value) { this.key = key; this.value = value; }
    public K getKey() { return key; }
    public V getValue() { return value; }
}

泛型接口

interface Converter<F, T> {
    T convert(F from);
}
class StringToInteger implements Converter<String, Integer> {
    public Integer convert(String from) {
        return Integer.valueOf(from);
    }
}

四、泛型方法

方法也可以定義自己的類型參數(shù):

public static <T> void printArray(T[] array) {
    for (T element : array) {
        System.out.println(element);
    }
}
String[] arr = {"A", "B", "C"};
printArray(arr); // 自動(dòng)推斷 T = String

? 泛型方法的類型參數(shù)與類的泛型參數(shù)獨(dú)立存在。

五、通配符:?的三種形態(tài)

通配符 ? 表示未知類型,常用于方法參數(shù)中。

通配符含義示例
?任意類型List<?> list
? extends TT 或其子類(上界通配符)List<? extends Number>
? super TT 或其父類(下界通配符)List<? super Integer>

示例:

public static void show(List<? extends Number> list) {
    for (Number n : list) {
        System.out.println(n);
    }
}
寫入能力讀取能力
? extends T? 讀安全 ? 寫
? super T? 寫安全 ? 讀(只能讀為 Object)

六、邊界與多重限制

class Calculator<T extends Number & Comparable<T>> {
    public boolean isGreater(T a, T b) {
        return a.compareTo(b) > 0;
    }
}

? 可指定多個(gè)上界,必須先是類后是接口。

七、泛型數(shù)組與類型推斷

  • ? 泛型數(shù)組不能直接創(chuàng)建:new T[10](類型擦除原因)
  • ? 可使用 List 或 Array.newInstance() 代替。

類型推斷:

List<String> list = List.of("A", "B");
var map = Map.of(1, "A", 2, "B"); // Java 10+

八、泛型的好處與限制

優(yōu)點(diǎn)缺點(diǎn)
? 編譯期類型安全? 運(yùn)行時(shí)類型擦除
? 代碼復(fù)用性高? 無法創(chuàng)建泛型數(shù)組
? 無需強(qiáng)轉(zhuǎn)? 不能用基本類型

九、常見泛型陷阱

? 泛型類型不能用于靜態(tài)上下文:

class Box<T> {
    // static T value; // 錯(cuò)誤!
}

? 泛型類型無法用于 instanceof:

if (obj instanceof Box<String>) // 錯(cuò)誤:類型擦除導(dǎo)致編譯不通過

?? 總結(jié)

分類關(guān)鍵語法示例
泛型類<T>class Box<T>
泛型方法<T>static <T> void print(T t)
通配符? extends / ? superList<? super Integer>
邊界T extends Number限制類型范圍

到此這篇關(guān)于Java 泛型詳解之類型參數(shù)的力量(最新推薦)的文章就介紹到這了,更多相關(guān)java泛型參數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何讓@EnableConfigurationProperties的值注入到@Value中

    如何讓@EnableConfigurationProperties的值注入到@Value中

    這篇文章主要介紹了如何讓@EnableConfigurationProperties的值注入到@Value中的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-06-06
  • Java基礎(chǔ)知識(shí)雜文

    Java基礎(chǔ)知識(shí)雜文

    這篇文章主要介紹了Java基礎(chǔ)知識(shí)雜文,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • 淺談Java平臺(tái)無關(guān)性

    淺談Java平臺(tái)無關(guān)性

    這篇文章主要介紹了淺談Java平臺(tái)無關(guān)性,對(duì)此感興趣的同學(xué),可以多了解一下
    2021-04-04
  • Java使用Redisson分布式鎖實(shí)現(xiàn)原理

    Java使用Redisson分布式鎖實(shí)現(xiàn)原理

    Redisson分布式鎖 之前的基于注解的鎖有一種鎖是基本redis的分布式鎖,這篇文章主要介紹了Java使用Redisson分布式鎖實(shí)現(xiàn)原理,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2018-10-10
  • Java遍歷Map鍵、值和獲取Map大小的方法示例

    Java遍歷Map鍵、值和獲取Map大小的方法示例

    本篇文章主要介紹了Java遍歷Map鍵、值和獲取Map大小的方法示例,詳細(xì)的介紹了Java遍歷Map的兩種實(shí)現(xiàn)方法和大小,具有一定的參考價(jià)值,有興趣的可以了解一下。
    2017-01-01
  • java web實(shí)現(xiàn)郵箱激活與忘記密碼

    java web實(shí)現(xiàn)郵箱激活與忘記密碼

    這篇文章主要為大家詳細(xì)介紹了java web實(shí)現(xiàn)郵箱激活與忘記密碼、重置密碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • Spring Boot與MyBatis配置與操作實(shí)戰(zhàn)指南

    Spring Boot與MyBatis配置與操作實(shí)戰(zhàn)指南

    本文介紹了如何在SpringBoot項(xiàng)目中配置和使用MyBatis,包括環(huán)境準(zhǔn)備、數(shù)據(jù)源配置、MyBatis配置、數(shù)據(jù)操作、事務(wù)管理以及高級(jí)配置如緩存和插件的使用,通過這些步驟,可以實(shí)現(xiàn)高效的數(shù)據(jù)驅(qū)動(dòng)應(yīng)用程序開發(fā),感興趣的朋友跟隨小編一起看看吧
    2026-01-01
  • 從拋出異常到返回JSON/XML:SpringBoot?異常處理全鏈路深度解析

    從拋出異常到返回JSON/XML:SpringBoot?異常處理全鏈路深度解析

    Spring?Boot?(基于?Spring?MVC)?提供了一套優(yōu)雅的、解耦的異常處理機(jī)制,本文將帶你深入底層,探究當(dāng)一個(gè)異常被拋出后,究竟經(jīng)歷了怎樣的奇幻漂流,又是如何根據(jù)前端需求自動(dòng)變成?JSON?或?XML?的,感興趣的朋友跟隨小編一起看看吧
    2026-02-02
  • java數(shù)據(jù)結(jié)構(gòu)之二分查找法 binarySearch的實(shí)例

    java數(shù)據(jù)結(jié)構(gòu)之二分查找法 binarySearch的實(shí)例

    這篇文章主要介紹了java數(shù)據(jù)結(jié)構(gòu)之二分查找法 binarySearch的實(shí)例的相關(guān)資料,希望通過本文能幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • Springboot如何通過yml配置文件為靜態(tài)成員變量賦值

    Springboot如何通過yml配置文件為靜態(tài)成員變量賦值

    這篇文章主要介紹了Springboot如何通過yml配置文件為靜態(tài)成員變量賦值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10

最新評(píng)論

绥滨县| 衡阳县| 大邑县| 滦南县| 彰武县| 崇州市| 邵阳市| 黔西县| 博客| 德州市| 广平县| 彭泽县| 西丰县| 祁连县| 安国市| 东海县| 连云港市| 石棉县| 汝州市| 永新县| 平原县| 昭苏县| 韶关市| 福州市| 扎兰屯市| 民和| 根河市| 陇南市| 霞浦县| 阿巴嘎旗| 东安县| 辽阳县| 湖北省| 鄂温| 分宜县| 宁乡县| 曲麻莱县| 会东县| 维西| 永修县| 绥中县|