發布時間: 2017-06-16 10:50:24
Integer max(Integer a, Integer b){
return a>b?a:b;
}
這樣編寫代碼當然沒有問題。不過,如果需要比較的不是Integer類型,而是Double或是Float類型,那么就需要另外再寫max()方法。參數有多少種類型,就要寫多少個max()方法。但是無論怎么改變參數的類型,實際上max()方法體內部的代碼并不需要改變。如果有一種機制,能夠在編寫max()方法時,不必確定參數a和b的數據類型,而等到調用的時候再來確定這兩個參數的數據類型,那么只需要編寫一個max()就可以了,這將大大降低程序員編程的工作量。
在泛型出現之前,Java的程序員可以采用一種變通的辦法:將參數的類型均聲明為Object類型。由于Object類是所有類的父類,所以它可以指向任何類對象,但這樣做不能保證類型安全。
泛型則彌補了上述做法所缺乏的類型安全,也簡化了過程,不必顯示地在Object與實際操作的數據類型之間進行強制轉換。通過泛型,所有的強制類型轉換都是自動和隱式的。因此,泛型擴展了重復使用代碼的能力,而且既安全又簡單。
///聲明一個泛型類
public class Generic {
T ob; // ob的類型是T,現在不能具體確定它的類型,需要到創建對象時才能確定
Generic(T o) {
ob = o;
}
// 這個方法的返回類型也是T
T getOb() {
return ob;
}
// 顯示T的類型
void showType() {
System.out.println("Type of T is:" + ob.getClass().getName());
}
}
public class demoGeneric {
public static void main(String args[]) {
// 聲明一個Integer類型的Generic變量
Generic iobj;
// 創建一個Integer類型的Generic對象
iobj = new Generic(100);
// 輸出它的一些信息
iobj.showType();
int k = iobj.getOb();
System.out.println("k=" + k);
// 聲明一個String類型的Generic變量
Generic sobj;
// 創建一個Double類型的Generic對象
sobj = new Generic("Hello");
// 輸出它的一些信息
sobj.showType();
String s = sobj.getOb();
System.out.println("s=" + s);
}
}
上一篇: {Java培訓}復數運算
下一篇: {Java培訓}歸并排序