Java泛型

1新王登基java

登基之後第一次早朝, 意氣風發的第5代Java國王坐在寶座上,看着下面恭恭敬敬的各位大臣,心情大好。框架

他早已下定決心,要刷新吏治,革除弊端,將Java帝國帶上更高的巔峯。線程

國王的第一道命令就是要求各位大臣展開一場轟轟烈烈的自檢運動,對本身負責的領域好好檢查一遍,傾聽一下帝國臣民們的呼聲,半個月之後,每一個大臣至少要報上來三條合理化建議。設計

下面的大臣心說這確定是三分鐘熱度,過段時間國王就忘了。雖然這麼想,嘴上仍是說道:「陛下聖明,真乃開天闢地之舉,定會使我Java帝國江山永固。」3d

沒想到半個月後又一次早朝,國王真的開始檢查做業了: 「IO大臣,你那裏狀況如何? 」blog

老奸巨猾的IO大臣雖然捱了當頭一棒,愣了一下,可是立刻恢復了:「陛下,我Java帝國自成立以來,通過先祖們勵精圖治,制度幾近完美, 國家繁榮昌盛,子民們無不交口稱頌, 我這裏實在是沒有什麼能夠改進的了。」字符串

其餘大臣也紛紛附和:「IO大臣所言極是,臣這裏也找不到了」 。編譯器

國王看着這些不幹事兒的官僚,恨得牙癢癢:「哼哼! 大家沒有,朕這裏但是有啊,來人,宣C++帝國的使者進殿!」string

2C++使者io

一個年輕人在你們狐疑的目光中走了進來, 在大殿中央給國王行了禮。

國王說道:「這是C++國王來的使者,他帶來了一個咱們帝國沒有的新玩意兒。 泛型先生,你一路舟車勞頓,辛苦了,煩請你給咱們說說C++王國的泛型吧。」

看來國王早就和這個傢伙串通好了,等着給咱們好看呢, 要當心, IO大臣警覺起來。

這個被稱爲泛型先生的傢伙說:「Java語言以嚴謹而著稱, 可是設計的時候卻沒有把泛型這個重要的概念給考慮進去,確實是不該該啊。」

「什麼是泛型? 能舉個例子嗎?」 線程大臣問道。

泛型先生展現了一段代碼:

一個故事讀懂Java泛型!C++表示java沒我大!

 

 

集合框架大臣一看這小子居然想拿本身開刀,這還了得, 接過話頭兒說:「這有什麼問題?」

小夥子說: 「我向List當中加了一個字符串和整數, 看起來沒有問題,但是使用List的人就麻煩了,他必須得知道第一個元素是字符串類型, 第二個是Integer, 還得強制轉型,要否則就會出錯。」

一個故事讀懂Java泛型!C++表示java沒我大!

 

 

「這不很正常嗎? 」 集合框架大臣問道 「 寫程序的那些碼農固然要記住每一個元素的類型了, 再說了,我這個List 能容納任何類型的元素,多靈活!」

泛型使者說:「這麼作會增長使用者的責任,編譯器也沒法幫忙, 在運行時纔會拋出Class Cast 異常。」

「那你說說,怎麼才能讓編譯器幫忙?」

「這就是我來這裏的目的了,在個人家鄉C++帝國, 咱們能夠定義一個模板類,例如:」

一個故事讀懂Java泛型!C++表示java沒我大!

 

 

「這裏定義了一個模板類List , 經過它你能夠實例化成你想要的任何類型,例如List<int>, List<string>,List<Employee>...... 上面的代碼實例化了一個List<int>,因此你只能往裏邊添加整數,若是添加其餘類型的值例如字符串, 編譯器就能檢查出來,直接報錯。 咱們C++帝國把這種能力稱爲泛型(Generics) 」

集合框架大臣笑道: 「哈哈,這麼古怪的語法,怪不得大家C++愈來愈.... 」 一轉眼看到Java國王那威嚴的目光, 他生生地把後半句給嚥了進去。

「衆位愛卿,估計你也看到了,這個‘泛型’可以在編譯期檢查出錯誤, 使用List的人也不用作強制轉型了,仍是頗有好處的。咱們Java 也應該加上相似功能」

「怎麼加上呢? 」 集合框架大臣問道。

「好辦啊,仿照C++的語法就好了」 Java國王心想,這些佔據高位,可是又不作事的傢伙們之後要通通替換掉。

國王讓呂公公展開了一張寫滿代碼的紙:

一個故事讀懂Java泛型!C++表示java沒我大!

 

 

「你們看看這段代碼,看到那個T沒有,你能夠它想象成一個佔位符,未來能夠傳入任意類型,例如Integer, String等等」

一個故事讀懂Java泛型!C++表示java沒我大!

 

 

集合框架大臣一看國王連代碼都寫好了,心說這國王也真夠拼的, 看來是鐵了心要這麼幹了。

相關文章
相關標籤/搜索