欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java 泛型全解析

 更新時間:2020年08月27日 14:21:12   作者:Jason  
這篇文章主要介紹了Java 泛型的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下

泛型簡介

什么是泛型?

  • 參化類型,數(shù)是JDK1.5的新特性。(定義泛型時使用參數(shù)可以簡單理解為形參),例如List<E>,Map<K,V>
  • 編譯時的一種類型,此類型僅僅在編譯階段有效,運(yùn)行時無效.例如List<String>在運(yùn)行時String會被擦除,最終系統(tǒng)會認(rèn)為都是Object.

為什么要使用泛型?

泛型是進(jìn)行類型設(shè)計或方法定義時的一種約束規(guī)范,基于此規(guī)范可以:

  1. 提高編程時靈活性(有點抽象,后續(xù)結(jié)合實例理解)。
  2. 提高程序運(yùn)行時的性能。(在編譯階段解決一些運(yùn)行時需要關(guān)注的問題,例如強(qiáng)轉(zhuǎn))

說明:泛型應(yīng)用相對比較簡單,難點在泛型類或方法的設(shè)計上,通過這樣的設(shè)計如何對現(xiàn)有類進(jìn)行減法設(shè)計,提高類或方法的通用性.

泛型應(yīng)用類型

泛型定義時常用方式有三種(可參考List<E>,Map<K,V)等接口定義):

  1. 泛型類:class 類名<泛型,…>{}
  2. 泛型接口:interface 接口名<泛型,…>{}
  3. 泛型方法: <泛型> 方法返回值類型 方法名(形參){}

泛型類定義及應(yīng)用

類泛型定義:(用于約束類中方法參數(shù)和方法返回值類型)

class Array<T>{//類泛型:類名<泛型>
  Object[] array=new Object[10];
  public void add(T t){}//通過類泛型約束方法參數(shù)類型
  public T get(int i){//通過類泛型約束方法返回值類型
    return (T)array[i];
  }
}

泛型接口定義及應(yīng)用

定義接口時指定泛型,用于約束接口方法參數(shù)類型以及方法返回值類

interface Task<Param,Result>{//思考map中的泛型Map<K,V>
  /**
   * 此方法用于執(zhí)行任務(wù)
   * @param arg 其類型由泛型參數(shù)Param決定
   * @return 其類型由泛型參數(shù)result決定
   */
  Result execute(Param arg);
}

泛型接口應(yīng)用實踐

class ConvertTask implements Task<String,Integer>{
  @Override
  public Integer execute(String arg) {
    // TODO Auto-generated method stub
    return Integer.parseInt(arg);
  }
}

泛型定義及應(yīng)用

泛型方法中的泛型僅僅應(yīng)用于當(dāng)前方法,主要應(yīng)用于一些靜態(tài)方法,當(dāng)然非靜態(tài)方法也可以應(yīng)用。

class ObjectFactory{
  /**泛型方法*/
  public static <T>T newInstance(Class<T> cls){
    return (T)cls.newInstance();
  }
}

泛型應(yīng)用通配符應(yīng)用

無界限定通配符

泛型無界通配符使用”?”進(jìn)行表示,可以代表一種任意參數(shù)類型(實參類型)。一般應(yīng)用于變量的定義。例如:Class<?> c1;

Class<?> c=Class.forName("java.util.Date");

上屆界限定通配符

泛型上屆限定符通過“<? extends 類型>”方式進(jìn)行實現(xiàn),主要用于方法參數(shù)或方法的返回值類型,例如:

static void doPrint(List<? extends CharSequence> list){
    System.out.println(list);
}

下屆限定通配符

泛型下屆限定符通過“<? super 類型>”方式進(jìn)行實現(xiàn),主要用于方法參數(shù)或方法的返回值類型,例如:

static void doPrint(Set<? super Integer> set){
    System.out.println(list);
}

泛型類型擦除實踐分析

泛型是編譯時的一種類型,在運(yùn)行時無效,運(yùn)行時候都會變成Object類型,例如:

ArrayList<String> list = new ArrayList<String>();
list.add("A");
//list.add(100);//直接不可以
//通過反射將100添加到集合
list.getClass().getMethod("add", Object.class).invoke(list, 100);
System.out.println(list);

總結(jié)(Summary)

本小節(jié)對泛型的定義,應(yīng)用場景,應(yīng)用類型以及泛型的類型擦出進(jìn)行了分析和實踐,希望在后續(xù)項目實踐中對泛型有一個更好的認(rèn)識。

以上就是Java 泛型全解析的詳細(xì)內(nèi)容,更多關(guān)于Java 泛型的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SpringBoot中的@ApiModelProperty注解作用

    SpringBoot中的@ApiModelProperty注解作用

    這篇文章主要介紹了SpringBoot中的@ApiModelProperty注解作用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教。
    2022-01-01
  • Spring框架讀取property屬性文件常用5種方法

    Spring框架讀取property屬性文件常用5種方法

    這篇文章主要介紹了Spring框架讀取property屬性文件常用5種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • 解析Java 泛型什么情況下不能使用

    解析Java 泛型什么情況下不能使用

    這篇文章主要介紹了解析Java 泛型什么情況下不能使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • springboot使用注解獲取yml配置的兩種方法

    springboot使用注解獲取yml配置的兩種方法

    本文主要介紹了springboot使用注解獲取yml配置的兩種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-09-09
  • 基于MybatisPlus插件TenantLineInnerInterceptor實現(xiàn)多租戶功能

    基于MybatisPlus插件TenantLineInnerInterceptor實現(xiàn)多租戶功能

    這篇文章主要介紹了基于MybatisPlus插件TenantLineInnerInterceptor實現(xiàn)多租戶功能,需要的朋友可以參考下
    2021-11-11
  • MyBatis?詳細(xì)講解動態(tài)?SQL的使用

    MyBatis?詳細(xì)講解動態(tài)?SQL的使用

    動態(tài)?SQL?是?MyBatis?的強(qiáng)大特性之一。如果你使用過?JDBC?或其它類似的框架,你應(yīng)該能理解根據(jù)不同條件拼接?SQL?語句有多痛苦,例如拼接時要確保不能忘記添加必要的空格,還要注意去掉列表最后一個列名的逗號。利用動態(tài)?SQL,可以徹底擺脫這種痛苦
    2022-04-04
  • 快速掌握SpringBoot應(yīng)用的啟動入口

    快速掌握SpringBoot應(yīng)用的啟動入口

    本篇并不是深究內(nèi)置服務(wù)器的啟動過程,而是追溯Springboot啟動之前到底做了什么?它是如何與我們經(jīng)常寫的@SpringBootApplication注解注釋的main方法類綁定起來的?對SpringBoot啟動入口相關(guān)知識感興趣的朋友一起看看吧
    2022-05-05
  • Java三目運(yùn)算中隱藏的自動拆裝箱

    Java三目運(yùn)算中隱藏的自動拆裝箱

    這篇文章主要介紹了Java三目運(yùn)算中隱藏的自動拆裝箱,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-11-11
  • 基于spring-boot-maven-plugin插件打包lib文件外置的方法(layout模式為ZIP模式)

    基于spring-boot-maven-plugin插件打包lib文件外置的方法(layout模式為ZIP模式)

    Maven是一個插件執(zhí)行框架,所有工作都由插件完成,同時?Maven?基于構(gòu)建生命周期的核心概念,明確定義了構(gòu)建和分發(fā)特定工件(項目)的過程,接下來通過本文給大家介紹下基于spring-boot-maven-plugin插件打包lib文件外置(layout模式為ZIP模式),需要的朋友可以參考下
    2022-09-09
  • 解決Mybatis-plus自定義TypeHandler查詢映射結(jié)果一直為null問題

    解決Mybatis-plus自定義TypeHandler查詢映射結(jié)果一直為null問題

    這篇文章主要介紹了解決Mybatis-plus自定義TypeHandler查詢映射結(jié)果一直為null問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07

最新評論