【泛型——這才真正的理解你】
前言:
曾記得那是機房重構,曾記得那是剛剛聽說有泛型這個東西,曾記得自己實現了datatable轉泛型的例項,而面對泛型,只知道它像一個集合一樣,儲存著資訊。然而,今天對於泛型的認識,讓我認識到了什麼才是學習?每個階段該如何去學習?這篇部落格,小編主要帶大家來理解什麼是泛型以及泛型的優缺點。
核心:
一、定義
泛型是具有佔位符(型別引數)的類、介面和方法,這些佔位符是類、結構、介面和方法所儲存或使用的一個或多個型別的佔位符。
這個定義,可能不好理解。
首先我們從它的英文出發:泛型的英語:generic,即通用的意思,用日常生活的例子來理解就是一個模子。什麼是模子呢?比如:桶,桶可以用來裝水,牛奶,豆漿等等,因此它們會有桶的形狀,及桶的特徵,我們的這個泛型,就是這樣,泛型就是一個模板型別,實現的時候可以把int,string等型別放入泛型中,如List<int>的例項就可以用List<T>泛型中定義的所有方法。
應用泛型,可把泛型比作一個黑盒子,我們不考慮盒子具體裡面是什麼型別,我們關注的是對盒子的處理, 此時我們不針對具體物件程式設計,給了一個型別,把它應用到泛型,就具有了泛型的特性。
二、泛型宣告
引入:System.Collections.Generic 名稱空間
List<T>的基本用法:
1.建立一個普通的泛型集合類
List<T>mylist=new List<T>();
T為列表元素的型別:
List<string> mylist = new List<string>();
2.新增列表中的元素
List.Add(T item)
基本的泛型,我們在機房重構的時候接觸過:請看之前的總結部落格:點選開啟連結
三、為什麼要引入泛型呢?下面來看它的優點:
•型別安全
為什麼用了泛型就型別安全了呢!使用泛型可以使泛型知道變數的型別限制,進而可以在更高程度上驗證型別假設,假設沒有泛型,型別安全主要由程式設計師來把握
•程式碼重用
程式碼重用,舉個例子吧!現在有一個需求,需要比較兩個整型數的大小,需要一個方法。假如又需要比較兩個字串的大小,是不還需要一個方法呢,如果再來個比較小數的大小呢?如果用泛型的話,一個方法就OK了,因為需求中只是比較的型別不同,實現方式是完全一樣的,這時可以利用泛型把任何型別當做引數傳入到這個型別中去例項化為具體型別的比較。減少了程式碼量,以後有這樣的需求的話直接用這個方法就好了!
•高效能
這個可以做一個具體的例項,使用泛型的速度比非泛型執行的時間短。
泛型不必對元素進行裝箱,那麼什麼是裝箱呢?所謂裝箱,就是把值型別打包到Object引用型別的一個例項;
int i = 123; object o =(object) i ; //boxing
•消除強制型別轉換
泛型不必裝箱,用一個通過的資料型別T來代替object,在類例項化時指定T的型別,執行時(Runtime)自動編譯為原生程式碼,執行效率和程式碼質量都有很大提高,並且保證資料型別安全。
通過強型別支援+泛型引數約束,決定了在編譯時就可找到不符合引數型別要求的地方,從而保證了編譯時的型別安全,避免了執行時的型別轉換錯誤。
總結
學習的道路永遠沒有終止,泛型的知識點還有很多很多,期待自己去學習和挖掘!
相關文章
- Android:寫了這麼多程式碼,你真的理解泛型嗎Android泛型
- 我理解的 Java 泛型Java泛型
- 泛型的約束理解泛型
- 深入理解 Java 泛型Java泛型
- 深入理解Java泛型Java泛型
- Java泛型理解與使用Java泛型
- Go 泛型的這 3 個核心設計,你都知道嗎?Go泛型
- 掌握它才說明你真正懂 Elasticsearch - Lucene (一)Elasticsearch
- 掌握它才說明你真正懂 Elasticsearch - Lucene (二)Elasticsearch
- 掌握它才說明你真正懂 Elasticsearch - ES(三)Elasticsearch
- Java泛型用了這麼多年,你真的瞭解嗎?Java泛型
- 重溫Java泛型,帶你更深入地理解它,更好的使用它!Java泛型
- ?你必須知道的Java泛型Java泛型
- 一文理解TS泛型泛型
- Java基礎——深入理解泛型Java泛型
- 理解C#泛型運作原理C#泛型
- 泛型--泛型萬用字元和泛型的上下限泛型字元
- 泛型就這麼簡單泛型
- 用了這麼多年的 Java 泛型,你對它到底有多瞭解?Java泛型
- Java 泛型,你瞭解型別擦除嗎?Java泛型型別
- 泛型類、泛型方法及泛型應用泛型
- C#泛型的逆變協變(個人理解)C#泛型
- 【java】【泛型】泛型geneticJava泛型
- 剖根問底:Java 不能實現真正泛型的原因是什麼?Java泛型
- Java 乾貨之深入理解Java泛型Java泛型
- 什麼才算是真正的程式設計能力?程式設計
- 【Spring註解驅動開發】自定義元件如何注入Spring底層的元件?看了這篇我才真正理解了原理!!Spring元件
- 泛型類和泛型方法泛型
- 泛型類、泛型方法、型別萬用字元的使用泛型型別字元
- 深入理解泛型-重寫泛型類方法遇到的問題(涉及JVM反編譯位元組碼)泛型JVM編譯
- TypeScript 泛型介面和泛型類TypeScript泛型
- Go 泛型之泛型約束Go泛型
- 泛型泛型
- Java中的泛型程式設計:深入理解型別引數與型別邊界的使用Java泛型程式設計型別
- 泛型最佳實踐:Go泛型設計者教你如何用泛型泛型Go
- Kotlin中的泛型Kotlin泛型
- 泛型物件的使用泛型物件
- Java中的泛型Java泛型
- 泛型擦除的原理泛型