如何通俗易懂地理解什麼叫泛型?

2021-01-09 劉小愛

今天是劉小愛自學Java的第55天。

感謝你的觀看,謝謝你。

話不多說,開始今天的學習:

補充學習一個知識點:泛型。

這個概念是在集合中接觸到的,因為當時學的有點懵,所以就沒有立馬寫出來。

現在回過頭來看,發現還是蠻簡單的。

一、泛型的概念

先回顧下集合和數組的區別:

數組長度固定不變,可以存放任意數據類型,但存放的數據類型要一致。集合長度可變,可以存放任意引用數據類型,但存儲的數據類型可以不一致。也就是說一個集合既可以存放String類型的數據又可以存放Integer類型數據(int對應的引用數據類型)。

這樣就會出現一個問題:

比如說:現在有一個集合,打算存儲群裡所有人的名字,結果有的人搗亂把年齡也存進去了。

這個時候編譯是不會報錯的,因為集合本來就可以存放多種數據類型,但是我以為只有名字,也就是字符串。

①在Collection集合中添加一個String類型的數據。

②在Collection集合中添加一個Integer類型的數據(18會自動轉換成對應的引用數據類型)。

③現在我想統計群裡人名都是多少字的,我以為只有字符串,就會將其強轉成String並調用String的lenth方法。

④運行報錯,因為有一個其他數據類型的數據混進來了,編譯時期不能檢測到,運行時會出現類轉化異常。

所以面對這種問題該怎麼辦呢?

這種時候,就需要使用到泛型了。

創建集合時先說清楚,只能存放String類型的數據,這時候若是有人搗亂存儲其他類型的數據編譯就會報錯。

等於是將運行時期會發生的異常提前到編譯時期了。

所以泛型的作用是一種安全機制,是一種書寫規範,它和接口的作用有著一定的類似,都是在制定規則。

如何理解接口?

接口裡的抽象方法只有方法名,沒有方法體,實現類必須重寫該方法說明方法體。

用現實裡的一個例子說明就是:語文老師只給你一個題目,你要寫一篇800字的作文。

題目名就好比抽象方法,作文就好比實現類重寫方法。

所以接口就和作文題目一樣是在制定規則。

如何理解泛型?

作文題材不限,記敘文、議論文、詩歌都可以。

但是不能一篇作文既寫成記敘文又寫成議論文。

一旦你確定了題材(比如說寫議論文),那麼這篇作文就不能寫其他題材了(只能寫議論文)想寫其他題材,那下一篇作文重新寫。

所以什麼叫泛型?

就好比作文題材不限,但一次只能寫一種題材,至於是什麼題材,由我們自己定。

所以本質上泛型它是一個變量,它是需要我們去賦值的。

二、泛型的使用

主要有泛型類、泛型接口、泛型方法以及泛型通配符。

1泛型類

非常常見的ArrayList類就是一個泛型類,看它的源碼:

①泛型使用格式

修飾符 class 類名<代表泛型的變量> { };

ArrayList類中使用E來代表泛型的變量,E本身並沒有含義,任意一個大寫字母都可以,A、B、T、W都可以。

②泛型類的使用

在創建對象的時候確定泛型,指定好了後這個對象就只能裝指定的數據類型了。

如果要換其他數據類型,就要重新創建該類的對象,重新指定泛型。泛型類有何好處?

③ArrayList的add方法

add方法參數就是一個泛型,也就是說創建對象時確定的是哪個類型,使用add方法就只能添加這個類型了,這就起到了一個千變萬化的效果。

2泛型接口

①泛型接口格式

修飾符 interface接口名<代表泛型的變量> { }

這次我們自定義一個泛型接口,泛型為A。

②泛型類的使用一

實現類實現接口、同時指定泛型類型。

③泛型類的使用二

實現類實現接口但不指定泛型,這個類也就成了泛型類。

ArrayList類本質上也就是這種情況,它實現了List<E>接口,但是沒有指定泛型。

3泛型方法

①泛型方法格式

修飾符 <代表泛型的變量> 返回值類型 方法名(參數){ }

②泛型方法使用

調用方法時,確定泛型的類型。

4泛型通配符

現有一個需求:封裝一個方法,可以遍歷參數為任意類型的ArrayList

①兩個不同類型的集合

一個集合泛型為String類,一個集合泛型為Integer:

ArrayList<String>list1和ArrayList<Integer> list2是兩個不同的類型,如果用常規方法,那要兩個方法(方法重載)

②泛型的通配符

不知道使用什麼類型來接收的時候,此時可以使用?,?表示未知通配符。

其中泛型通配符還可以這樣使用:

<? extends Person>:表示可以傳遞Person及其子類<? super Person>:表示可以傳遞Person及其父類注意:

泛型不存在繼承關係:ArrayList<Object>list並不是ArrayList<String>list1和ArrayList<Integer>list2的父類,它們三個是三個不同的類型。其中Java裡的泛型是一種偽泛型。什麼叫偽泛型?

也就是泛型只存在於編譯時期,在運行時期會被擦除,這個比較抽象不好說明,了解就好了。真泛型也是有的,但在Java語言裡沒有,C語言裡有。

總結:

謝謝你的觀看。

如果可以的話,麻煩幫忙點個讚,謝謝你。

相關焦點

  • 什麼,JAVA的泛型是偽泛型
    這種參數類型可以用在類、接口和方法的創建中,分別稱為泛型類、泛型接口和泛型方法。具體來說,我們先通過對比下代碼,來進一步體會泛型的好處先看看沒有支持泛型之前的代碼沒有運用泛型的代碼運用泛型的代碼示範由以上兩個例子可以看出:引入泛型後,代碼在前端編譯的時候會做檢查,不會像1.5的代碼示範一樣,直到程序運行期才提示異常。
  • 高頻考點:什麼是泛型,泛型的使用場景
    一起學習、成長、溫情的熱愛生活作者丨BossXiang 圖丨pexels泛型的使用場景,可以作用在什麼位置,使用泛型有什麼好處,靈魂三連問???1.泛型就是一種未知的類,將未知的類型聲明在集合、對象上,泛型的默認類型為Object。
  • Java基礎學習,什麼是泛型概念,使用泛型有哪些好處?
    泛型的字面概念:適合用於許多類型。在面向對象中,多態算是一種泛化機制。泛型的使用例子:在如圖的例子中T就是類型參數當你創建Holder對象時,必須指明想持有什麼類型的對象,將其置於尖括號內,就像main()中那樣。然後,你就只能在Holder中存入該類型(或其子類,以為多態與泛型不衝突)的對象了。
  • 一句話概述什麼是泛型,教你直白理解Java泛型
    泛型就是把類型明確的工作推遲到創建對象或調用方法的時候採取明確的特殊類型。參數化類型:把類型當做參數來傳遞。Object<數據類型>,這裡的數據類型只能是類類型,不能是基本類型。為什麼不能是基本類型?
  • Java泛型的約束與局限性
    運行時類型查詢只適用於原始類型(raw type)運行時:通常指在Classloader裝載之後,JVM執行之時類型查詢:instanceof、getClass、強制類型轉換原始類型:即(raw type),泛型類型經編譯器類型擦除後是Object或泛型參數的限定類型(例如Pair,Comparable就是T的限定類型,轉化後泛型的原始類型就是
  • Java泛型了解麼?什麼是類型擦除?介紹一下常用的通配符?
    Java 泛型(generics)是 JDK 5 中引入的一個新特性, 泛型提供了編譯時類型安全檢測機制,該機制允許程式設計師在編譯時檢測到非法的類型。泛型的本質是參數化類型,也就是說所操作的數據類型被指定為一個參數。
  • 快報:正式提案將泛型特性加入 Go 語言
    快報:正式提案將泛型特性加入 Go 語言 經歷九九八十一難,多年的不斷探討和 Go 語言愛好者們在社區中的強烈關注,且 Go 官方在 2020 年不斷放出消息。
  • 通俗易懂的 TYPESCRIPT 入門教程 - 勤與奮
    但是,當我們嘗試將類型為 unknown 的值賦值給其他類型的變量時會發生什麼?畢竟我們不知道變量 value 中存儲了什麼類型的值。現在讓我們看看當我們嘗試對類型為 unknown 的值執行操作時會發生什麼。
  • 初中地理如何學?
    地理學科是一門兼有自然科學和社會科學性質的基礎課程,與其它學科相比,該學科以其綜合性、區域性、空間性見長。初中地理包括世界地理和中國地理兩部分,共分為四冊書。其中七年級學習世界地理,八年級學習中國地理。初中地理內容主要包括自然地理和人文地理兩個大的方面,自然地理主要包括位置、地形、氣候、河流、資源等方面。
  • 七年級下冊數學,如何用坐標表示地理位置?
    如何確定地圖中建築的位置?這就需要用到這次課所學知識——平面直角坐標。我們不妨再來看一道例題,在一次「尋寶」遊戲中,尋寶人已經找到了坐標為(3,2)和(3,-2)的兩個標誌點,並且知道藏寶地點的坐標為(4,4),如何確定直角坐標系找到「寶藏」?
  • seo優化是什麼意思?小白通俗易懂篇
    seo是什麼意思,seo這個詞估計對於站長們來說再熟悉不過了,並且為了做好seo優化有的站長付出了很多精力,對於新手來說,可能還不太清楚seo是什麼意思,下面小麥就針對seo優化是什麼意思來給大家通俗易懂的解釋下,seo就是搜尋引擎優化,利用百度合理規則使其要優化的關鍵詞在搜尋引擎達到一個好的排名
  • C#中,如何對Dictionary添加、獲取和移除數據?
    C#核心開發-泛型字典1.泛型字典基本概念C#中的Dictionary<TKey,TValue>是具有鍵值對的字典類型,是泛型類型,可以根據任意類型的鍵,獲取任意類型的值。可以將字典類型理解為:人本身和身份證號碼是綁定在一起的,知道了某個人的身份證號碼,就可以找到該人。
  • 如何設置推特地理位置定位?
    企業希望通過Twitter地理位置定位,專注於特定位置的人來實現企業的業務目標。無論企業的客戶Twitter地理位置位於街道上,遍布全國還是遍布世界各地,Twitter地理位置定位都可以使企業吸引最適合企業的業務範圍和理想的受眾。Twitter地理位置可以幫助企業在Twitter上找到受眾。
  • 科學界4大神獸聚集:麥克斯韋妖是什麼?通俗易懂的物理學!
    那科學界的大佬們為了讓複雜的物理理論變得通俗易懂,它們又創造出什麼神奇的方法呢?今天小編就來和大家詳細的聊聊物理學界的四大神獸,看科學家們是如何讓普通人也能聽懂高深的理論的。這四大神獸分別是:芝諾的烏龜,拉普拉斯獸,麥克斯韋妖和薛丁格的貓。
  • 狗狗冷知識科普丨一種叫「Do as I Do」訓狗方法介紹
    它是來自義大利訓狗師設計的一種叫「Do as I Do」的訓練方法。其意思是「照我說的做」,但是因為是運用在狗的身上,準確的表達方式應該是「模仿我來做」。也就是一種讓狗狗模仿自己的訓練方法!什麼是「Do as I Do」?「Do as I Do」大致上就是一種「模仿學習」的動物學習方法的訓練。
  • 抖音爸爸的爸爸叫什麼是什麼歌 家庭禮貌稱呼歌歌詞完整版
    最近在抖音上聽到一首歌曲,歌詞是「爸爸的爸爸叫什麼,爸爸的爸爸叫爺爺」。抖音爸爸的爸爸叫什麼是什麼歌?家庭禮貌稱呼歌歌詞介紹?  在生活中,經常有看到一些小孩子坐的搖搖車,在坐搖搖車的時候,就會聽到《家庭禮貌稱呼歌》這首歌曲。抖音爸爸的爸爸叫什麼是什麼歌?家庭禮貌稱呼歌歌詞介紹?
  • 古代蒙汗藥有什麼成分?萬一中招該怎麼解?清朝的解法很有畫面感
    蒙汗藥顧名思義就是讓人發蒙的藥,也有人說蒙汗藥原來叫"蒙漢藥",意思是專門讓男子漢發蒙的藥。還有人說蒙汗藥原來叫麻漢藥,因為此藥屬於麻醉劑,有麻藥成分在裡面。金庸的武俠小說和元代、明代的小說和劇本裡,蒙汗藥是出鏡率最高的一個詞。一、古代到底有沒有蒙汗藥?在《施公案》中,毛如虎一不小心蒙汗藥麻翻,差點就誤了大事。
  • 微信朋友圈怎麼自定義地理位置 如何更改位置
    當你在微信朋友圈發布一條新的動態的時候,可以選擇顯示當時的地理位置,其實這個位置微信是自定義的哦,那麼微信朋友圈怎麼自定義地理位置,下面大家就一起來看看微信如何更改地理位置吧。微信自定義位置的好處就是能夠修改你當時的所在地,讓朋友圈的其他朋友只會看到你自定義的位置。
  • 解我青少年教育:家長如何跟叛逆期的孩子溝通?
    孩子進入青春期,隨著而來的就是叛逆期,這是一個令所有父母都頭疼的事情,甚至有些家長認為孩子得了心理病,他們跟瘋子似的,管不得,罵不得,那麼家長到底該如何和叛逆期的孩子溝通呢?