前言

日常瑣碎的時間下,不適合看一些長篇高質量的文章,但是瑣碎時間也是時間,看一些短小精悍的文章來查缺補漏也是極好的。碎花化的時間,就交給“碎片化的文章”來填充吧。

今天“碎片化文章”主題:泛型-有限通配符。之前發過一篇文章,感覺並沒有聊明白,所以重新整理了一篇文章,旨在解釋清楚:有限通配符存在的意義

正文

聊聊泛型

開篇先問大家一個問題:如何理解泛型

Java官方文檔是這樣說的:Generics enable types (classes and interfaces) to be parameters when defining classes, interfaces and methods.(翻譯過來就是:泛型將類型參數化

因爲這樣的特性,讓我們在寫代碼的時候很方便,而且更安全和可靠。

OK,現在咱們來進一步思考泛型,剛纔提到了泛型的好處。這裏咱們想一想:是不是泛型總是應用在對外提供能力的接口上?

因此這裏引申出來了泛型更深層的意義:在設計一些較底層的模塊時,泛型可以提供更好的規範,減少上層使用時出錯的可能。

聊聊有限通配符

先上一段關於上下限通配符的代碼:

熟悉有限通配符語法的同學,都知道:

對於意味着只能取( get())到T及T子類,而不能放入( set())。對於意味着只能放( set())到T及T父類,而不能取到( get())。這也就是上述截圖中爆紅的原因。

不知道有多少人和我一樣對這種用法有“疑惑”:爲啥要這樣限制。其實這裏我們不妨想想,我們日常開發時寫過多少次這樣的代碼?我相信答案是一定是:很少。

沒錯,這些限制本身也不是給上層業務方提供的!這句話不好理解?沒關心繼續往下看。

咱們在看一段代碼:

就拿上述中這個例子,假設我要調用這個方法,其實我們並不關心super和extends的用法,我們關心的是:當我按方法規範傳遞參數時,方法的實現能不能達到我的預期。

這裏我們假設按 mergeList()的要求正確的傳入了倆個List,那麼很明顯 in2這個List能夠順利合併到 out中。

方法調用者很方便,方法提供者也很方便。有限通配符以一種規範讓參與者們都能在代碼編寫階段不出錯、少出錯

因此,充分理解纔是最重要的~

尾聲

OK,接下來讓我們關掉手機,思考3分鐘,一切都是這麼順其自然~

相關文章