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

Java:泛型知識知多少

 更新時間:2021年08月31日 16:54:40   作者:Carson_Ho  
這篇文章主要介紹了java泛型基礎知識及通用方法,從以下幾個方面介紹一下java的泛型: 基礎, 泛型關鍵字, 泛型方法, 泛型類和接口,感興趣的可以了解一下

定義

可理解為 適配廣泛的類型,即參數(shù)化類型,可以把類型像方法的參數(shù)那樣進行傳遞。

// 以ArrayList為示例
// 泛型T可以是任意類
public class ArrayList<T> {
    private T[] array;
    //...
}
// 通過泛型的使用,就可創(chuàng)建多種類型的ArrayList
// 1. 可存儲String的ArrayList:
ArrayList<String> strList = new ArrayList<String>();
// 相當于
public class ArrayList<String> {
    private String[] array;
    //...
}
// 2. 可存儲Float的ArrayList:
ArrayList<Float> floatList = new ArrayList<Float>();
// 相當于
public class ArrayList<Float> {
    private Float[] array;
    //...
}

意義(即為什么要使用泛型)

通過定義一種模板方式結構,從而保證類型安全 & 匹配。下面將用ArrayList為示例作為說明。

1. 背景

ArrayList的本質:一個可變的Object類型數(shù)組

public class ArrayList {
    private Object[] array;
    // ...
}

2. 問題

在使用ArrayList存儲不同類型時,需要強轉類型,不然容易出現(xiàn)ClassCastException異常。如存儲String類型:

// 獲取到ArrayList里的Object類型時,必須強制轉型為String
// 不然容易出現(xiàn)ClassCastException異常
ArrayList list = new ArrayList();
list.add("carson ho");
String first = (String) list.get(0);

3. 解決方案

使用泛型將ArrayList變成一種模板:ArrayList,就可以創(chuàng)建任意類型的ArrayList。即:

// 泛型T可以是任意類
public class ArrayList<T> {
    private T[] array;
    //...
}
// 多種類型
// 1. 可存儲String的ArrayList:
ArrayList<String> strList = new ArrayList<String>();
// 相當于
public class ArrayList<String> {
    private String[] array;
    //...
}
// 2. 可存儲Float的ArrayList:
ArrayList<Float> floatList = new ArrayList<Float>();
// 相當于
public class ArrayList<Float> {
    private Float[] array;
    //...
}

作用

1.使編譯器可在編譯期間對類型進行檢查以提高類型安全,減少運行時由于對象類型不匹配引發(fā)的異常;

2.運行時所有的轉換都是強制、隱式的,大大提高了代碼的重用率。如對集合類取數(shù)據(jù)時,不需 對存儲的數(shù)據(jù) 進行強制類型轉2換。

原理

基于 類型擦除。即即 使用泛型時加上的類型參數(shù),會在編譯器在編譯時去掉所以,在生成的 Java 字節(jié)碼中,不包含泛型中的類型信息。這里需要特別說明的是:

  • Java中的泛型是在編譯器層次實現(xiàn),編譯器在編譯時盡可能的發(fā)現(xiàn)可能出錯的地方,但仍無法避免在運行時刻出現(xiàn)類型轉換異常的情況;
  • 在代碼中定義的List 、List等類型,在編譯后都會變成List
  • JVM看到的只是List,而由泛型附加的類型信息對JVM來說是不可見的

同時需要特別注意的是:

  • 在無泛型的情況下,通常是使用Object類型來進行多種類型數(shù)據(jù)的操作,此時操作最多的是針對該Object進行數(shù)據(jù)的強制轉換
  • 而這種轉換是基于開發(fā)者對該數(shù)據(jù)類型明確的情況下進行(如將Object型轉換為String型);若類型不一致,編譯器在編譯過程中不會報錯,但在運行時會出錯

額外說明: List能否轉為List?

不能。具體描述如下:

// 代碼1和代碼2相同
// 代碼1
List<String> strings = new LinkedList<String>( ); 
 List<Integer> ints = new LinkedList<Integer>( );
// 代碼2
 List strings = new LinkedList( ); 
 List ints = new LinkedList( );
// 轉換方式可以是如下:
List ss=strings; 
List<Object> objects=ss;

總結

本篇片文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內(nèi)容!

相關文章

  • Javaweb實現(xiàn)在線人數(shù)統(tǒng)計代碼實例

    Javaweb實現(xiàn)在線人數(shù)統(tǒng)計代碼實例

    這篇文章主要介紹了Javaweb實現(xiàn)在線人數(shù)統(tǒng)計代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • Springboot利用Aop捕捉注解實現(xiàn)業(yè)務異步執(zhí)行

    Springboot利用Aop捕捉注解實現(xiàn)業(yè)務異步執(zhí)行

    在開發(fā)過程中,盡量會將比較耗時且并不會影響請求的響應結果的業(yè)務放在異步線程池中進行處理,那么到時什么任務在執(zhí)行的時候會創(chuàng)建單獨的線程進行處理呢?這篇文章主要介紹了Springboot利用Aop捕捉注解實現(xiàn)業(yè)務異步執(zhí)行
    2023-04-04
  • 解決org.apache.ibatis.binding.BindingException:?Invalid?bound?statement?(not?found)問題(最新推薦)

    解決org.apache.ibatis.binding.BindingException:?Invalid?boun

    這篇文章主要介紹了解決org.apache.ibatis.binding.BindingException:?Invalid?bound?statement?(not?found)問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-05-05
  • SpringBoot整合Log4j2實現(xiàn)自定義日志打印失效的原因及解決

    SpringBoot整合Log4j2實現(xiàn)自定義日志打印失效的原因及解決

    本文給大家介紹了關于SpringBoot項目整合Log4j2實現(xiàn)自定義日志打印失效原因及解決辦法,主要的原因是因為SpringBoot的logback包的存在,文中通過圖文給大家了詳細解決方法,需要的朋友可以參考下
    2024-01-01
  • java用戶名密碼驗證示例代碼分享

    java用戶名密碼驗證示例代碼分享

    這篇文章主要介紹了java用戶名密碼驗證示例代碼,需要的朋友可以參考下
    2014-03-03
  • SpringBoot2.3整合redis緩存自定義序列化的實現(xiàn)

    SpringBoot2.3整合redis緩存自定義序列化的實現(xiàn)

    這篇文章主要介紹了SpringBoot2.3整合redis緩存自定義序列化的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • 利用springmvc處理模型數(shù)據(jù)

    利用springmvc處理模型數(shù)據(jù)

    這篇文章主要介紹了如何利用springmvc 處理模型數(shù)據(jù),幫助大家更好的理解和學習使用springmvc,感興趣的朋友可以了解下
    2021-03-03
  • Java日志軟件Log4j的基本使用教程

    Java日志軟件Log4j的基本使用教程

    這篇文章主要介紹了Java日志軟件Log4j的基本使用教程,包括回滾和發(fā)送日志郵件等基本功能使用的講解,需要的朋友可以參考下
    2015-12-12
  • 如何在Spring?Boot框架中使用攔截器實現(xiàn)URL限制

    如何在Spring?Boot框架中使用攔截器實現(xiàn)URL限制

    在Spring?Boot框架中,您可以使用攔截器(Interceptor)來控制限制URL列表,本文通過一個簡單的示例給大家介紹Spring?Boot?攔截器實現(xiàn)URL限制的操作方法,感興趣的朋友跟隨小編一起看看吧
    2023-08-08
  • java學習之理解自動拆裝箱特性

    java學習之理解自動拆裝箱特性

    這篇文章主要介紹java自動拆裝箱特性以及java自動拆裝箱的應用,有需要的朋友可以借鑒參考下,希望可以有所幫助,祝大家早日升職加薪
    2021-09-09

最新評論