一个故事读懂Java泛型!C++表示java没我大!

1新王登基

登基以后第一次早朝, 意气风发的第5代Java国王坐在宝座上,看着下面恭恭敬敬的各位大臣,心情大好。

他早已下定决心,要刷新吏治,革除弊端,将Java帝国带上更高的巅峰。

国王的第一道命令就是要求各位大臣展开一场轰轰烈烈的自检运动,对自己负责的领域好好检查一遍,倾听一下帝国臣民们的呼声,半个月以后,每个大臣至少要报上来三条合理化建议。

下面的大臣心说这肯定是三分钟热度,过段时间国王就忘了。虽然这么想,嘴上还是说道:“陛下圣明,真乃开天辟地之举,定会使我Java帝国江山永固。”

没想到半个月后又一次早朝,国王真的开始检查作业了: “IO大臣,你那里情况如何? ”

老奸巨猾的IO大臣虽然挨了当头一棒,愣了一下,但是马上恢复了:“陛下,我Java帝国自成立以来,经过先祖们励精图治,制度几近完美, 国家繁荣昌盛,子民们无不交口称颂, 我这里实在是没有什么可以改进的了。”

其他大臣也纷纷附和:“IO大臣所言极是,臣这里也找不到了” 。

国王看着这些不干事儿的官僚,恨得牙痒痒:“哼哼! 你们没有,朕这里可是有啊,来人,宣C++帝国的使者进殿!”

2C++使者

一个年轻人在大家狐疑的目光中走了进来, 在大殿中央给国王行了礼。

国王说道:“这是C++国王来的使者,他带来了一个我们帝国没有的新玩意儿。 泛型先生,你一路舟车劳顿,辛苦了,烦请你给我们说说C++王国的泛型吧。”

看来国王早就和这个家伙串通好了,等着给我们好看呢, 要小心, IO大臣警觉起来。

这个被称为泛型先生的家伙说:“Java语言以严谨而著称, 但是设计的时候却没有把泛型这个重要的概念给考虑进去,确实是不应该啊。”

“什么是泛型? 能举个例子吗?” 线程大臣问道。

泛型先生展示了一段代码:

一个故事读懂Java泛型!C++表示java没我大!

集合框架大臣一看这小子竟然想拿自己开刀,这还了得, 接过话头儿说:“这有什么问题?”

小伙子说: “我向List当中加了一个字符串和整数, 看起来没有问题,可是使用List的人就麻烦了,他必须得知道第一个元素是字符串类型, 第二个是Integer, 还得强制转型,要不然就会出错。”

一个故事读懂Java泛型!C++表示java没我大!

C/C++学习交流群:1018234390,有大牛答疑,有资源共享!有想学习CC++的,或是转行,或是大学生,还有工作中想提升自己能力的,正在学习的小伙伴欢迎加入学习。

“这不很正常吗? ” 集合框架大臣问道 “ 写程序的那些码农当然要记住每个元素的类型了, 再说了,我这个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没我大!

集合框架大臣一看国王连代码都写好了,心说这国王也真够拼的, 看来是铁了心要这么干了。

C/C++学习交流群:1018234390,有大牛答疑,有资源共享!有想学习CC++的,或是转行,或是大学生,还有工作中想提升自己能力的,正在学习的小伙伴欢迎加入学习。

猜你喜欢

转载自blog.csdn.net/L947223094/article/details/89846888