亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

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

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

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

命名類型參數

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

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

大家都知道,Java的泛型是偽泛型,這是因為Java在編譯期間,所有的泛型信息都會被擦除,正確理解泛型概念的首要前提是理解類型擦除。Java 泛型是如何工作的?什么是類型擦除?答:泛型是通過類型擦除來實現的,編譯器在編譯時擦除了所有泛型類型相關的信息,所以在運行時不存在任何泛型類型相關的信息,譬如 List<Integer> 在運行時僅用一個 List 來表示,這樣做的動機是兼容 Java 1.5 之前版本。

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

類型擦除原則

用通用類型的類型參數替換其綁定的有界類型參數; 如果使用無界類型參數,則使用Object替換類型參數; 插入類型轉換以實現類型安全; 生成橋接方法以在擴展通用類型中保持多態。

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

<T> T 的用法

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

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); } /** * 這個<T> T 可以傳入任何類型的List * 關于參數T * 第一個 表示是泛型 * 第二個 表示返回的是T類型的數據 * 第三個 限制參數類型為T * * @param data * @return */ private <T> T getListFisrt(List<T> data) { if (CollectionUtils.isEmpty(data)) { return null; } return data.get(0); }}

T 的用法

單獨的T表示限制參數的類型。這種用法一般多用于共同操作一個類對象,然后獲取里面的集合信息。

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); } /** * 這個只能傳遞T類型的數據 * 返回值 就是Demo<T> 實例化傳遞的對象類型 * * @param data * @return */ private T getListFisrt(List<T> data) { if (data == null || data.size() == 0) { return null; } return data.get(0); }}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: 久久精品中文字幕极品 | 亚洲国产亚洲片在线观看播放 | 91亚洲精品视频 | 日韩视频在线观看视频 | 草草在线观看 | 小明台湾成人永久免费看看 | 国产女主播在线播放 | 麻豆91av| 九九视频精品在线 | 欧美一级特黄特黄毛片 | 欧美日韩国产最新一区二区 | 国产 日韩 在线 亚洲 字幕 中文 | 国产成人青青热久免费精品 | 六月久久 | 精品久久国产 | 99pao在线视频精品免费 | 黄色片免费看视频 | 国产丶欧美丶日韩丶不卡影视 | 国产a三级三级三级 | 看黄色一级片子 | 全部费免一级毛片不收费 | 国产中日韩一区二区三区 | 欧美成人h版影院在线播放 欧美成人h版整片合集 | 亚洲艹 | 成人夜色视频 | 嘿嘿嘿视频在线观看 | 中文字幕 亚洲 一区二区三区 | 成人性色生活片免费网 | 大片在线播放日本一级毛片 | 久草毛片 | 欧美国产亚洲精品a第一页 欧美国产亚洲一区 | 日韩欧美在线视频观看 | 日本限制级在线 | 偷看老师裙底无内裤福利图片 | 能免费观看的韩剧 | 国产精品vv在线 | 污的网址 | 欧美亚洲欧美日韩中文二区 | 欧美破处视频在线 | 91精品国产闺蜜国产在线 | 亚洲 欧美 日韩 在线 香蕉 |