詳解Java泛型之(四)一個(gè)例子理解泛型帶來(lái)的好處
今天我設(shè)計(jì)一個(gè)實(shí)例,分別通過(guò)重載、Object類型參數(shù)以及泛型三種方式來(lái)實(shí)現(xiàn)這個(gè)實(shí)例,讓大家清楚地體會(huì)到使用泛型技術(shù)給我們帶來(lái)的好處!
實(shí)例需求
有這樣一個(gè)需求,自己寫(xiě)一個(gè)方法能夠比較兩個(gè)數(shù)值的大小,如果相等返回true,否則返回false。
通過(guò)重載實(shí)現(xiàn)
分析:因?yàn)樵趈ava中,常用數(shù)值包括Integer、Float、Double、Long我們可以利用重載的知識(shí)(同名不同參)設(shè)計(jì)四個(gè)方法來(lái)實(shí)現(xiàn)
- public static boolean equal(Integer a,Integer b) {
- if (a.equals(b))
- return true;
- else
- return false;
- }
- public static boolean equal(Double a,Double b) {
- if (a.equals(b))
- return true;
- else
- return false;
- }
- public static boolean equal(Float a,Float b) {
- if (a.equals(b))
- return true;
- else
- return false;
- }
通過(guò)Object類型參數(shù)實(shí)現(xiàn)
很顯然像上面這樣的設(shè)計(jì)稍微有些麻煩,我們可以利用Object作為參數(shù),通過(guò)一個(gè)方法就實(shí)現(xiàn)該需求,代碼如下:
- public static boolean equal(Object a,Object b) {
- if (a.equals(b))
- return true;
- else
- return false;
- }
通過(guò)泛型實(shí)現(xiàn)
但是像上面這樣設(shè)計(jì)仍然有一個(gè)問(wèn)題,因?yàn)閰?shù)是Object,所以可以實(shí)現(xiàn)equal(123,“abc”) 的比較,這與題目要求不符!題目要求是——比較兩個(gè)數(shù)值的大小,而abc的類型是String。這個(gè)時(shí)候我們就可以通過(guò)泛型的知識(shí)來(lái)解決該問(wèn)題了,我們看Integer、Float、Double、Long的源碼發(fā)現(xiàn),他們都繼承了抽象類Number,于是我們可以使用泛型的邊界值的知識(shí)點(diǎn)解決該問(wèn)題,代碼如下:
很顯然通過(guò)泛型的方式實(shí)現(xiàn),不僅讓代碼量減少了很多,還很容易地控制了參數(shù)的傳入范圍!