今天我们一起来了解一下<em>java</em>中一个很有用的概念:泛型。先来说<em>java</em>泛型的定义。关于<em>java</em>泛型比较广泛的说法是“参数化类型”。是不是有点懵?看不懂就对了,就是要你难理解才高大上啊!其实很简
2021-05-30 20:30:17
今天我們一起來了解一下java中一個很有用的概念:泛型。
先來說java泛型的定義。關於java泛型比較廣泛的說法是「參數化類型」。是不是有點懵?看不懂就對了,就是要你難理解才高大上啊!其實很簡單,就是將類型作為參數傳入到方法。java泛型通常以「<>」來包裹。
jdk中有許多使用泛型的例子。比如java集合框架。我們創建一個集合物件時可以這樣創建:
List list = new ArrayList<>();
由於沒有指明集合中元素的具體類型,我們在向集合中存入元素時,可以存入各種類型。這樣當我們把集合物件傳輸給另一個方法後,從集合中取出元素的類型是不知道的。在使用時可能發生類型轉換異常。
所以我麼需要再傳入類型作為參數,告訴jvm,元素的類型是什麼。安全的做法是如下圖的程式:
這樣我們就知道集合中的元素的類型了,但是這樣也限定了該集合只能夠存入字元串類型的元素。與List類似,Set集合、Map集合也都可以使用泛型規定元素的類型。
看到List集合的泛型使用,我們也可以仿照一個泛型類出來。
如圖是我自己仿照List創建的一個泛型類:
我使用了「T」,「E」,「V」替換實際的類型來創建類。實際使用時,我們可以根據需要來傳入實際的java類型來參與程式運算。
這裡需要注意的一點:泛型不能指代八種基礎類,只能替代「引用類型」,否則編譯不通過。
java泛型除了上述這些外,還有一個特殊的泛型「<?>」,這個被稱為通配符。
改成通配符「?」也能夠正常運行:
說完通配符「?」後,咱們再來聊聊泛型的邊界範圍。
有這樣一個問題:泛型的類型佔位符可以替代各種實際類型,雖然靈活,但是有時候根據業務需要,某個方法只應該傳入某種資料類型及其子類型。為了限制傳入的類型,我們就用上了邊界。
泛型邊界分為上邊界、下邊界。上邊界限定傳入的類型的最高階父類型,下邊界限定傳入的子類的最低階子類型。
泛型上邊界的寫法舉例:「? extends Number」。「?」可以替換為其他泛型佔位符,限制的類型寫在extends後面」。如下圖,我們限定getV方法的入參KV類型的泛型上邊界是Number(入參類型必須為Number類型或Number之下的子類),則該方法可接受Number類型及其子類的參數。我們呼叫方法時傳入的泛型為Integer
泛型下邊界的寫法舉例:「? super Number」。「?」可以替換為其他泛型佔位符,限制的類型寫在super後面」。如圖,我們限定getV方法的參數KV類型的泛型下邊界是Number(入參類型必須為Number類型或Number之上的父類),則該方法可接受Number類型及其父類的參數。我們呼叫方法時傳入的泛型為Integer時,Integer類型為Number的子類型,而限定的最低類型是Number類型,入參應該比Number類型要高,或者是它本身。所以這裡會編譯不通過:
通過上兩圖的示例,相信大家應該都能夠搞懂泛型的上下邊界用法了吧?
好了,今日的教程就到這裡。
#Java語言初學#
相關文章
今天我们一起来了解一下<em>java</em>中一个很有用的概念:泛型。先来说<em>java</em>泛型的定义。关于<em>java</em>泛型比较广泛的说法是“参数化类型”。是不是有点懵?看不懂就对了,就是要你难理解才高大上啊!其实很简
2021-05-30 20:30:17
▲注:以上图片皆来自<em>浏览器</em>图片搜索以及微博 举报/反馈 发表评论 发表 作者最新文章 70年,歌里写的西藏,最终都变成了现实 书画南北方一一无锡花鸟画研究会迎建党百年绘画作品展 网络老爸的情感人生 文/晓
2021-05-30 20:00:56
<em>Android</em>系统与iOS系统是目前全球最广泛的两款移动操作系统,经多年发展,应用等相关生态已趋于成熟,旗下拥有数千万开发者,而鸿蒙呢,2019年才出世,至今仅两年,除华为自家的核心应用外,仅有400+应用已适配。 一
2021-05-30 20:00:46
支持独立联网、运行独立系统、拥有独立应用、可独立通话。魅族对其的定位是,挑战安卓智能手表标杆,既能独当一面,也是主流 <em>Android</em> 手机的绝佳拍档。今天,魅族官方也再次确认,即将到来的魅族全智能手表支持语音控
2021-05-30 20:00:19
那么这次联想的笔记本电脑推出了哪些新品呢,就让我们一睹为快。拯救者Y9000K 从官宣来看,Y9000K顺利升级到i7-11800H,这个<em>CPU</em>比R9-5900HX稍微好丢丢,但价格也不便宜的;新款Y9000K最高可以选配i7-11800H和RTX3080,
2021-05-30 19:31:13
能在真实的王者荣耀游戏测试中保持稳定的90帧速率,全特效团战时也不失节奏,运行起来还是很流畅的,笔者甚至觉得这完全不像联发科的处理器,远远超出了我的期望。任务召唤等大型游戏中,也有比较稳定的帧数表现,<em>CPU</em>也
2021-05-30 19:31:08