/**
* 泛型: (和swift里面的一樣)
*? 通俗理解: 泛型就是解決 類, 接口, 方法的重用性, 以及對(duì)不特定數(shù)據(jù)類型的支持(類型校驗(yàn))
*
*
*/
void main() {
? print(getData(123));
? print(getData("字符串"));
? print(getData([1, 2, 3, 4]));
? // 如果想指定傳入的類型,就在調(diào)用的時(shí)候通過(guò)<類型> 來(lái)指定類型, 如果指定類型之后, 參數(shù)和類型不一致會(huì)報(bào)錯(cuò)
? // String str = getData<String>(123);//要求的是字符串, 傳入的是數(shù)字就報(bào)錯(cuò)
? String str = getData<String>("123"); //要求的是字符串, 傳入的是數(shù)字就報(bào)錯(cuò)
? print(str);
// 下面是泛型類的使用, 在使用new創(chuàng)建累的實(shí)例的時(shí)候加上<T>, 就代表了類里面定義的T的類型
// 這里就是要求傳入的T是map類型
? FileCache f = new FileCache<Map>();
? f.setByKey("k", {"name": "張三"});
? // f.setByKey("v", 123);//上面定義的是Map,這里傳入number類型, 運(yùn)行就會(huì)報(bào)錯(cuò)
? // 這里要求傳入的是number類型
? FileCache f1 = new FileCache<int>();
? f1.setByKey("k", 123);
? // f1.setByKey("k", {"name": "張三"});//這里要求的是int類型, 傳入的是Map類型, 運(yùn)行會(huì)報(bào)錯(cuò)
}
// 傳入什么類型就返回什么類型的數(shù)據(jù)
// 泛型T, 在方法名后面加上<T>, 參數(shù)數(shù)據(jù)類型是T
T getData<T>(T value) {
? return value;
}
// 這里做一個(gè)泛型接口,在接口后面加個(gè)<T>代表的是泛型接口,沒加就是普通接口
abstract class Cache<T> {
? getByKey(String key);
? void setByKey(key, T value);
}
// 實(shí)現(xiàn)接口, 因?yàn)槭欠盒徒涌? 這里都要帶上<T>
class FileCache<T> implements Cache<T> {
? @override
? getByKey(String key) {
? ? return null;
? }
? @override
? void setByKey(key, value) {
? ? print("$key = $value");
? }
}