溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

《Java架構筑基》從Java基礎講起——泛型基礎

發(fā)布時間:2020-07-07 13:41:53 來源:網(wǎng)絡 閱讀:256 作者:未來可期_ 欄目:編程語言

一.泛型的概述

1.1 泛型由來

我們的集合可以存儲多種數(shù)據(jù)類型的元素,那么在存儲的時候沒有任何問題,但是在獲取元素,并向下轉型的時候,可能會存在一個錯誤,而這個錯誤就是ClassCastException . 很顯然,集合的這種可以存儲多種數(shù)據(jù)類型的元素的這個特點,不怎么友好 , 程序存在一些安全隱患,那么為了出來這種安全隱患,我們應該限定一個集合存儲元素的數(shù)據(jù)類型,我們只讓他存儲統(tǒng)一中數(shù)據(jù)類型的元素,那么在做向下轉型的是就不會存在這種安全隱患了. 怎么限定集合只能給我存儲同一種數(shù)據(jù)類型的元素呢? 需要使用泛型。

1.2 基本概述

  • 是一種把類型明確的工作推遲到創(chuàng)建對象或者調用方法的時候才去明確的特殊的類型。參數(shù)化類型,把類型當作參數(shù)一樣的傳遞。
  • 泛型的出現(xiàn)減少了很多強轉的操作,同時避免了很多運行時的錯誤,在編譯期完成檢查類型轉化

1.3 引入泛型的目的

了解引入泛型的動機,就先從語法糖開始了解。

語法糖(Syntactic Sugar),也稱糖衣語法,是由英國計算機學家Peter.J.Landin發(fā)明的一個術語,指在計算機語言中添加的某種語法,這種語法對語言的功能并沒有影響,但是更方便程序員使用。Java中最常用的語法糖主要有泛型、變長參數(shù)、條件編譯、自動拆裝箱、內部類等。虛擬機并不支持這些語法,它們在編譯階段就被還原回了簡單的基礎語法結構,這個過程成為解語法糖。

1.4 泛型的目的

Java 泛型就是把一種語法糖,通過泛型使得在編譯階段完成一些類型轉換的工作,避免在運行時強制類型轉換而出現(xiàn)ClassCastException,即類型轉換異常。

二.泛型初步探索

JDK 1.5 時才增加了泛型,并在很大程度上都是方便集合的使用,使其能夠記住其元素的數(shù)據(jù)類型。

在泛型(Generic type或Generics)出現(xiàn)之前,是這么寫代碼的:博客

public static void main(String[] args){
    List list = new ArrayList();
    list.add("123");
    list.add("456");
    System.out.println((String)list.get(0));
}

當然這是完全允許的,因為List里面的內容是Object類型的,自然任何對象類型都可以放入、都可以取出,但是這么寫會有兩個問題:

  • 當一個對象放入集合時,集合不會記住此對象的類型,當再次從集合中取出此對象時,該對象的編譯類型變成了Object。
  • 運行時需要人為地強制轉換類型到具體目標,實際的程序絕不會這么簡單,一個不小心就會出現(xiàn)java.lang.ClassCastException。
  • 所以,泛型出現(xiàn)之后,上面的代碼就改成了大家都熟知的寫法:
    public static void main(String[] args){
    List<String>
    list = new ArrayList<String>();
    list.add("123");
    list.add("456");
    System.out.println(list.get(0));
    }

    這就是泛型。

  • 泛型是對Java語言類型系統(tǒng)的一種擴展,有點類似于C++的模板,可以把類型參數(shù)看作是使用參數(shù)化類型時指定的類型的一個占位符。引入泛型,是對Java語言一個較大的功能增強,帶來了很多的好處。

三.泛型的格式

3.1 泛型格式如下

  • <數(shù)據(jù)類型> 這里的數(shù)據(jù)類型只能是引用數(shù)據(jù)類型
  • <數(shù)據(jù)類型1 , 數(shù)據(jù)類型2 , ....>

四.泛型的好處

  • ①類型安全。類型錯誤現(xiàn)在在編譯期間就被捕獲到了,而不是在運行時當作java.lang.ClassCastException展示出來,將類型檢查從運行時挪到編譯時有助于開發(fā)者更容易找到錯誤,并提高程序的可靠性。
  • ②消除了代碼中許多的強制類型轉換,增強了代碼的可讀性。
  • ③為較大的優(yōu)化帶來了可能。優(yōu)化了程序設計,解決了黃色警告線。
向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI