什么是泛型?
通俗理解:泛型就是解決 類 介面 方法的復用性、以及對不特定資料型別的支持(型別校驗)
如下代碼,只能回傳string型別的資料
String getData(String value){ return value; }
如下代碼,同時支持回傳 string型別 和int型別 ,但是這么些造成代碼冗余
String getData1(String value){ return value; } int getData2(int value){ return value; }
如下代碼,同時回傳 string型別 和number型別,不指定型別可以解決這個問題
getData(value){ return value; }
不指定型別放棄了型別檢查,我們現在想實作的是傳入什么 回傳什么,比如:傳入number 型別必須回傳number型別 傳入 string型別必須回傳string型別
getData<T>(T value){ return value; }
void main(){ print(getData(25)); print(getData('123兔兔')); getData<String>('你好'); print(getData<int>(12)); }
集合List 泛型類的用法 案例:把下面類轉換成泛型類,要求List里面可以增加int型別的資料,也可以增加String型別的資料,但是每次呼叫增加的型別要統一
class PrintClass<T>{ List list=new List<T>(); void add(T value){ this.list.add(value); } void printInfo(){ for(var i=0;i<this.list.length;i++){ print(this.list[i]); } } }
void main() { PrintClass p=new PrintClass<int>(); p.add(12); p.add(23); p.printInfo(); }
Dart中的泛型介面:
實作資料快取的功能:有檔案快取、和記憶體快取,記憶體快取和檔案快取按照介面約束實作,
1、定義一個泛型介面 約束實作它的子類必須有getByKey(key) 和 setByKey(key,value)
2、要求setByKey的時候的value的型別和實體化子類的時候指定的型別一致
abstract class Cache<T>{ getByKey(String key); void setByKey(String key, T value); } class FlieCache<T> implements Cache<T>{ @override getByKey(String key) { return null; } @override void setByKey(String key, T value) { print("我是檔案快取 把key=${key} value=https://www.cnblogs.com/jukaiit/p/${value}的資料寫入到了檔案中"); } } class MemoryCache<T> implements Cache<T>{ @override getByKey(String key) { return null; } @override void setByKey(String key, T value) { print("我是記憶體快取 把key=${key} value=https://www.cnblogs.com/jukaiit/p/${value} -寫入到了記憶體中"); } }
void main(){ MemoryCache m=new MemoryCache<Map>(); m.setByKey('index', {"name":"張三","age":25}); }
本文鏈接:https://www.cnblogs.com/jukaiit/p/12260579.html
Dart學習系列文章:https://www.cnblogs.com/jukaiit/category/1636484.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/173482.html
標籤:Dart
