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

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

 更新時間:2020年07月02日 09:46:16   投稿:yaominghui  
這篇文章主要介紹了Java泛型<T> T與T的使用方法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

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

命名類型參數(shù)

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

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

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

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

類型擦除原則

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

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

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

T 的用法

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

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 如何利用JConsole觀察分析Java程序的運行并進(jìn)行排錯調(diào)優(yōu)

    如何利用JConsole觀察分析Java程序的運行并進(jìn)行排錯調(diào)優(yōu)

    從Java 5開始 引入了 JConsole。JConsole 是一個內(nèi)置 Java 性能分析器,可以從命令行或在 GUI shell 中運行。您可以輕松地使用 JConsole(或者,它更高端的 “近親” VisualVM )來監(jiān)控 Java 應(yīng)用程序性能和跟蹤 Java 中的代碼
    2015-12-12
  • Java GUI進(jìn)階之流式布局管理器FlowLayout專項精講

    Java GUI進(jìn)階之流式布局管理器FlowLayout專項精講

    FlowLayout-流式布局管理器,按水平方向依次排列放置組件,排滿一行,換下一行繼續(xù)排列。排列方向(左到右 或 右到左)取決于容器的componentOrientation屬性
    2022-04-04
  • MyBatis中動態(tài)sql的實現(xiàn)方法示例

    MyBatis中動態(tài)sql的實現(xiàn)方法示例

    這篇文章主要給大家介紹了關(guān)于MyBatis中動態(tài)sql的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • Java 堆內(nèi)存與棧內(nèi)存詳細(xì)介紹

    Java 堆內(nèi)存與棧內(nèi)存詳細(xì)介紹

    這篇文章主要介紹了Java 堆內(nèi)存與棧內(nèi)存詳細(xì)介紹的相關(guān)資料,這里對java 的堆內(nèi)存和棧內(nèi)存進(jìn)行了詳細(xì)的分析,需要的朋友可以參考下
    2016-11-11
  • MyBatis中多對多關(guān)系的映射和查詢

    MyBatis中多對多關(guān)系的映射和查詢

    本文主要介紹了MyBatis中多對多關(guān)系的映射和查詢的相關(guān)知識。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • springboot接受前端請求的方法實現(xiàn)

    springboot接受前端請求的方法實現(xiàn)

    本文主要介紹了springboot接受前端請求的方法實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • 在java上使用亞馬遜云儲存方法

    在java上使用亞馬遜云儲存方法

    這篇文章主要介紹了在java上使用亞馬遜云儲存方法,首先寫一個配置類,寫一個controller接口調(diào)用方法存儲文件,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2024-01-01
  • SpringBoot配置文件中密碼屬性加密的實現(xiàn)

    SpringBoot配置文件中密碼屬性加密的實現(xiàn)

    本文主要介紹了SpringBoot配置文件中密碼屬性加密的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • RabbitMQ冪等性與優(yōu)先級及惰性詳細(xì)全面講解

    RabbitMQ冪等性與優(yōu)先級及惰性詳細(xì)全面講解

    關(guān)于MQ消費者的冪等性問題,在于MQ的重試機(jī)制,因為網(wǎng)絡(luò)原因或客戶端延遲消費導(dǎo)致重復(fù)消費。使用MQ重試機(jī)制需要注意的事項以及如何解決消費者冪等性與優(yōu)先級及惰性問題以下將逐一講解
    2022-11-11
  • SpringBoot集成P6spy實現(xiàn)自定義SQL日志打印

    SpringBoot集成P6spy實現(xiàn)自定義SQL日志打印

    本文主要介紹了SpringBoot集成P6spy實現(xiàn)自定義SQL日志打印,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07

最新評論

怀化市| 化德县| 嘉兴市| 陇川县| 张家川| 孝义市| 滁州市| 固始县| 霍林郭勒市| 金门县| 泰顺县| 通道| 和林格尔县| 聊城市| 巴里| 东源县| 周口市| 靖州| 仁寿县| 兴义市| 贵南县| 即墨市| 抚州市| 苗栗市| 临颍县| 萨嘎县| 定西市| 汝南县| 松原市| 夏津县| 宜章县| 临泽县| 仙桃市| 邛崃市| 镇坪县| 花莲县| 东港市| 句容市| 武宁县| 铅山县| 砀山县|