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