国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Java泛型<T> T與T的使用方法詳解

瀏覽:3日期:2022-08-29 18:44:58

泛型(Generic type 或者 generics)是對(duì) Java 語(yǔ)言的類型系統(tǒng)的一種擴(kuò)展,以支持創(chuàng)建可以按類型進(jìn)行參數(shù)化的類。可以把類型參數(shù)看作是使用參數(shù)化類型時(shí)指定的類型的一個(gè)占位符,就像方法的形式參數(shù)是運(yùn)行時(shí)傳遞的值的占位符一樣。在集合框架(Collection framework)中泛型的身影隨處可見。例如,Map 類允許向一個(gè) Map 類型的實(shí)例添加任意類的對(duì)象,即使最常見的情況在給定映射(map)中保存一個(gè)string鍵值對(duì)。

命名類型參數(shù)

對(duì)于常見的泛型模式,推薦的泛型類型變量:

E:元素(Element),多用于java集合框架 K:關(guān)鍵字(Key) N:數(shù)字(Number) T:類型(Type) V:值(Value)

大家都知道,Java的泛型是偽泛型,這是因?yàn)镴ava在編譯期間,所有的泛型信息都會(huì)被擦除,正確理解泛型概念的首要前提是理解類型擦除。Java 泛型是如何工作的?什么是類型擦除?答:泛型是通過類型擦除來實(shí)現(xiàn)的,編譯器在編譯時(shí)擦除了所有泛型類型相關(guān)的信息,所以在運(yùn)行時(shí)不存在任何泛型類型相關(guān)的信息,譬如 List<Integer> 在運(yùn)行時(shí)僅用一個(gè) List 來表示,這樣做的動(dòng)機(jī)是兼容 Java 1.5 之前版本。

泛型擦除具體來說就是在編譯成字節(jié)碼時(shí)首先進(jìn)行類型檢查,然后進(jìn)行類型擦除(即所有類型參數(shù)都用他們的限定類型替換,包括類、變量和方法),最后如果類型擦除和多態(tài)性發(fā)生沖突,就在子類中使用橋接方法解決;如果調(diào)用泛型方法的返回類型被擦除,則在調(diào)用該方法時(shí)插入強(qiáng)制類型轉(zhuǎn)換。在類型擦除中,編譯器確保不會(huì)創(chuàng)建額外的類,并且沒有運(yùn)行時(shí)開銷。

類型擦除原則

用通用類型的類型參數(shù)替換其綁定的有界類型參數(shù); 如果使用無界類型參數(shù),則使用Object替換類型參數(shù); 插入類型轉(zhuǎn)換以實(shí)現(xiàn)類型安全; 生成橋接方法以在擴(kuò)展通用類型中保持多態(tài)。

<T> T 和T的區(qū)別:T是Type的首字母縮寫;<T> T 表示“返回值”是一個(gè)泛型,傳入什么類型,就返回什么類型;而單獨(dú)的“T”表示限制傳入的參數(shù)類型。

<T> T 的用法

這個(gè)<T> T 表示返回值T的類型是泛型,T是一個(gè)占位符,用來告訴編譯器,這個(gè)東西是先給我留著, 等我編譯的時(shí)候再告訴你是什么類型。

import org.springframework.util.CollectionUtils;import java.util.ArrayList;import java.util.List;public class Demo { public static void main(String[] args) { Demo demo = new Demo(); //獲取string類型 List<String> array = new ArrayList<String>(); array.add('test'); array.add('doub'); String str = demo.getListFisrt(array); System.out.println(str); //獲取Integer類型 List<Integer> nums = new ArrayList<Integer>(); nums.add(31); nums.add(32); Integer num = demo.getListFisrt(nums); System.out.println(num); } /** * 這個(gè)<T> T 可以傳入任何類型的List * 關(guān)于參數(shù)T * 第一個(gè) 表示是泛型 * 第二個(gè) 表示返回的是T類型的數(shù)據(jù) * 第三個(gè) 限制參數(shù)類型為T * * @param data * @return */ private <T> T getListFisrt(List<T> data) { if (CollectionUtils.isEmpty(data)) { return null; } return data.get(0); }}

T 的用法

單獨(dú)的T表示限制參數(shù)的類型。這種用法一般多用于共同操作一個(gè)類對(duì)象,然后獲取里面的集合信息。

import java.util.ArrayList;import java.util.List;public class Demo2<T> { public static void main(String[] args) { //限制T 為String 類型 Demo2<String> demo = new Demo2<String>(); List<String> array = new ArrayList<String>(); array.add('Tom'); array.add('河南'); String str = demo.getListFisrt(array); System.out.println(str); //獲取Integer類型 Demo2<Integer> demo2 = new Demo2<Integer>(); List<Integer> nums = new ArrayList<Integer>(); nums.add(12); nums.add(13); Integer num = demo2.getListFisrt(nums); System.out.println(num); } /** * 這個(gè)只能傳遞T類型的數(shù)據(jù) * 返回值 就是Demo<T> 實(shí)例化傳遞的對(duì)象類型 * * @param data * @return */ private T getListFisrt(List<T> data) { if (data == null || data.size() == 0) { return null; } return data.get(0); }}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 免费一级毛片麻豆精品 | 国产永久免费高清动作片www | 久久国产精品夜色 | 亚洲天堂网在线视频 | 欧美国产成人免费观看永久视频 | 4455四色永久免费 | 国产在线精品一区二区不卡 | 欧美在线一级毛片视频 | 99精品在线播放 | a级毛片免费全部播放 | 亚洲免费网址 | 免费观看欧美精品成人毛片能看的 | 亚洲综合无码一区二区 | 99久久精品久久久 | 欧美日本高清视频在线观看 | 欧美三级不卡在线观看视频 | 国产精品亚洲天堂 | 欧美在线一区二区三区 | 久草在线新首页 | 久草成人在线视频 | 九九视频国产 | 九九精品久久久久久噜噜 | 亚洲天堂男人的天堂 | 波多野结衣视频免费观看 | 国内自拍在线观看 | 97视频在线视频 | 国产精品视频成人 | 手机黄色网址 | 免费一级毛片在线播放放视频 | 精品久久久久久综合日本 | xx另类性欧美 | 毛片免费的 | aaa毛片免费观看 | 日本人成18在线播放 | 欧美大尺度aaa级毛片 | 热99re久久国超精品首页 | 日韩一级在线视频 | 色综合久久88色综合天天小说 | 最新亚洲国产有精品 | 亚洲va久久久噜噜噜久久狠狠 | wwww亚洲|