一力麸、概念
泛型克蚂,即“參數(shù)化類型”。一提到參數(shù)悉罕,最熟悉的就是定義方法時有形參,然后調(diào)用此方法時傳遞實參类早。那么參數(shù)化類型怎么理解呢?
顧名思義缭召,就是將類型由原來的具體的類型參數(shù)化逆日,類似于方法中的變量參數(shù)屏富,此時類型也定義成參數(shù)形式(可以稱之為類型形參)狠半,
然后在使用/調(diào)用時傳入具體的類型(類型實參)。
泛型的本質(zhì)是為了參數(shù)化類型(在不創(chuàng)建新的類型的情況下神年,通過泛型指定的不同類型來控制形參具體限制的類型)已日。也就是說在泛型使用過程中飘千,操作的數(shù)據(jù)類型被指定為一個參數(shù),這種參數(shù)類型可以用在類缔莲、接口和方法中痴奏,分別被稱為泛型類厌秒、泛型接口、泛型方法檐晕。
二蚌讼、泛型類
泛型類型用于類的定義中棉姐,被稱為泛型類屠列。通過泛型可以完成對一組類的操作對外開放相同的接口。最典型的就是各種容器類伞矩,如:List、Set夏志、Map乃坤。
// 1.定義一個泛型類,當(dāng)實例化這個類的時候沟蔑,必須傳入相應(yīng)的類型參數(shù)湿诊,在類中有一個方法會消費(fèi)傳入的類型參數(shù),調(diào)用該方法就可以得到與傳入?yún)?shù)相關(guān)的數(shù)據(jù)瘦材。
/**
* 泛型類
* 定義一個泛型類厅须,當(dāng)實例化這個類的時候,必須傳入相應(yīng)的類型參數(shù)食棕,在類中有一個方法會消費(fèi)傳入的類型參數(shù)眶拉,調(diào)用該方法就可以得到與傳入?yún)?shù)相關(guān)的數(shù)據(jù)。
*/
public class GenericsClass<T> {
public T city;
GenericsClass(T t) {
this.city = t;
}
/**
* 獲取城市信息
* @return
*/
public String getCityInfo() {
return "cityInfo:" + city.toString();
}
}
// 2.測試類,根據(jù)不同的對象拾氓,實例化不同的泛型類,調(diào)用類中的方法,獲取相對應(yīng)傳入的類型參數(shù)的信息
/**
* 測試GenericsClass
*/
class GenericsClassTest {
/**
*
*/
@Test
void getCityInfo() {
Beijing beijing = new Beijing();
GenericsClass b = new GenericsClass(beijing);
System.out.println(b.getCityInfo());
System.out.println("/---------------------------------/");
Tianjin tianjin=new Tianjin();
GenericsClass t = new GenericsClass(tianjin);
System.out.println(t.getCityInfo());
}
}
// 3.測試用到的類型參數(shù)對象
@Data
@Accessors(chain = true)
public class Beijing {
private String name="北京";
private String area = "北方";
private Integer age = 500;
}
@Data
public class Tianjin {
private String name="天津";
private String area = "東方";
private Integer age = 300;
}
// 4.控制臺輸出
cityInfo:Beijing(name=北京, area=北方, age=500)
/---------------------------------/
cityInfo:Tianjin(name=天津, area=東方, age=300)
引用: