激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術|

服務器之家 - 編程語言 - JAVA教程 - Java泛型 T與T的使用方法詳解

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

2020-07-02 12:07yaominghui JAVA教程

這篇文章主要介紹了Java泛型 T與T的使用方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

泛型(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是一個占位符,用來告訴編譯器,這個東西是先給我留著, 等我編譯的時候再告訴你是什么類型。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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表示限制參數的類型。這種用法一般多用于共同操作一個類對象,然后獲取里面的集合信息。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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);
  }
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://www.cnblogs.com/east7/p/13210761.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品久久久久一区二区 | 国产大片在线观看 | 韩国精品一区二区三区四区五区 | 日韩精品网站在线观看 | 久久久久久久久淑女av国产精品 | 91 在线| av国产在线被下药迷网站 | 91 在线视频观看 | 久久久电影电视剧免费看 | 午夜久 | 成人永久免费视频 | 最新中文字幕第一页视频 | 欧美一级网 | 欧美精品一区二区三区久久久 | av免费大全 | 亚洲一区二区 | 国产成人午夜精品 | 国产婷婷一区二区三区 | 精品国产一区二区三区四 | 国产自在自线午夜精品视频在 | 圆产精品久久久久久久久久久 | 欧美一级黄色片在线观看 | 999久久久久久 | 欧美激情999| 性aaa| 亚洲免费资源 | 一区在线看 | 中国洗澡偷拍在线播放 | 欧美成人三级大全 | 成人做爽爽爽爽免费国产软件 | 日本在线免费观看视频 | 午夜视频在线观看91 | 91一区二区在线观看 | 91精品国产乱码久久桃 | 色综合狠狠 | 操碰网| 最新欧美精品一区二区三区 | 91麻豆精品国产91久久久更新资源速度超快 | 欧美aⅴ视频 | 中日韩乱码一二新区 | 毛片在线播放视频 |