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

一.泛型的概述

1.1 泛型由來

咱們的集合能夠存儲多種數據類型的元素,那麼在存儲的時候沒有任何問題,可是在獲取元素,並向下轉型的時候,可能會存在一個錯誤,而這個錯誤就是ClassCastException . 很顯然,集合的這種能夠存儲多種數據類型的元素的這個特色,不怎麼友好 , 程序存在一些安全隱患,那麼爲了出來這種安全隱患,咱們應該限定一個集合存儲元素的數據類型,咱們只讓他存儲統一中數據類型的元素,那麼在作向下轉型的是就不會存在這種安全隱患了. 怎麼限定集合只能給我存儲同一種數據類型的元素呢? 須要使用泛型。java

1.2 基本概述

  • 是一種把類型明確的工做推遲到建立對象或者調用方法的時候纔去明確的特殊的類型。參數化類型,把類型看成參數同樣的傳遞。
  • 泛型的出現減小了不少強轉的操做,同時避免了不少運行時的錯誤,在編譯期完成檢查類型轉化

1.3 引入泛型的目的

瞭解引入泛型的動機,就先從語法糖開始瞭解。程序員

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

1.4 泛型的目的

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

二.泛型初步探索

JDK 1.5 時才增長了泛型,並在很大程度上都是方便集合的使用,使其可以記住其元素的數據類型。優化

在泛型(Generic type或Generics)出現以前,是這麼寫代碼的:博客設計

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類型的,天然任何對象類型均可以放入、均可以取出,可是這麼寫會有兩個問題:code

  • 當一個對象放入集合時,集合不會記住此對象的類型,當再次從集合中取出此對象時,該對象的編譯類型變成了Object。
  • 運行時須要人爲地強制轉換類型到具體目標,實際的程序毫不會這麼簡單,一個不當心就會出現java.lang.ClassCastException。
  • 因此,泛型出現以後,上面的代碼就改爲了你們都熟知的寫法:
    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語言類型系統的一種擴展,有點相似於C++的模板,能夠把類型參數看做是使用參數化類型時指定的類型的一個佔位符。引入泛型,是對Java語言一個較大的功能加強,帶來了不少的好處。

三.泛型的格式

3.1 泛型格式以下

  • <數據類型> 這裏的數據類型只能是引用數據類型
  • <數據類型1 , 數據類型2 , ....>

四.泛型的好處

  • ①類型安全。類型錯誤如今在編譯期間就被捕獲到了,而不是在運行時看成java.lang.ClassCastException展現出來,將類型檢查從運行時挪到編譯時有助於開發者更容易找到錯誤,並提升程序的可靠性。
  • ②消除了代碼中許多的強制類型轉換,加強了代碼的可讀性。
  • ③爲較大的優化帶來了可能。優化了程序設計,解決了黃色警告線。
相關文章
相關標籤/搜索