Java中泛型的理解
泛型是Java SE 1.5的新特性,泛型的本質(zhì)是參數(shù)化類型,也就是說所操作的數(shù)據(jù)類型被指定為一個參數(shù)。這種參數(shù)類型可以用在類、接口和方法的創(chuàng)建中,分別稱為泛型類、泛型接口、泛型方法。 泛型類或泛型
泛型是Java SE 1.5的新特性,泛型的本質(zhì)是參數(shù)化類型,也就是說所操作的數(shù)據(jù)類型被指定為一個參數(shù)。這種參數(shù)類型可以用在類、接口和方法的創(chuàng)建中,分別稱為泛型類、泛型接口、泛型方法。
泛型類或泛型接口
如果一個類要和別的N個類型打交道,但是處理的邏輯都是一樣的,我們可以把要處理的類作為類參(泛型),減少重復的代碼。
class AListForStudent{
void add(Student stu){
...
}
Student get(int index){
}
}
class AListForTeacher{
void add(Teacher stu){
...
}
Teacher get(int index){
}
}
class AList{
void add(Object stu){
...
}
}
上面的代碼展示了三種處理不同類型對象的方式:完全重復的邏輯,只是運算因子不一樣,用方法的封裝去解決;完全重復的邏輯,只是實例狀態(tài)不同,用繼承去解決;完全重復的邏輯,只是面向的具體類型不同,用泛型去解決。
class AListlt;Tgt;{
// T待定,泛型類中可以把T當作一個類型來使用。一旦確定,所有T出現(xiàn)的地方都會被真實的類型替代
void add(T stu){
...
}
T get(int index){
}
}
AListlt;Studentgt; stuList new AListlt;Studentgt;();
(new Teacher()); // 編譯錯誤
(new 好學生()); // 正確
泛型方法
lt;Tgt; Listlt;Tgt; queryForList(String query, Classlt;Tgt; claz, Object... params)
調(diào)用:
Listlt;Studentgt; stuList queryForList(sql, );
上面的代碼展示了一個泛型方法的例子,通過在方法簽名中使用lt;Tgt;聲明類型參數(shù),使得該方法可以返回不同類型的List。