一、Dart中的泛型 泛型方法
通俗理解:泛型就是解决 类 接口 方法的复用性、以及对不特定数据类型的支持(类型校验)
一般用 T 表示泛型
1getData<T>(T value){ 2 return value; 3 } 4 5void main(){
getData<String>('你好');
1 print(getData<int>(12)); 2 3 }
二、Dart中的泛型 泛型类
把下面类转换成泛型类,要求List里面可以增加int类型的数据,也可以增加String类型的数据。但是每次调用增加的类型要统一
1class PrintClass<T>{ 2 List list=new List<T>(); 3 void add(T value){ 4 this.list.add(value); 5 } 6 void printInfo(){ 7 for(var i=0;i<this.list.length;i++){ 8 print(this.list[i]); 9 } 10 } 11 } 12 13 void main() { 14 15 // PrintClass p=new PrintClass<String>(); //指定传入String类型 16 17 // p.add('你好'); 18 19 // p.add('哈哈'); 20 21 // p.printInfo(); 22 23 24 PrintClass p=new PrintClass<int>(); //指定传入int类型 25 26 p.add(12); 27 28 p.add(23); 29 30 p.printInfo(); 31 32}
三、Dart中的泛型 泛型接口
Dart中的泛型接口:
实现数据缓存的功能:有文件缓存、和内存缓存。内存缓存和文件缓存按照接口约束实现。
1、定义一个泛型接口 约束实现它的子类必须有getByKey(key) 和 setByKey(key,value)
2、要求setByKey的时候的value的类型和实例化子类的时候指定的类型一致
1abstract class Cache<T>{ 2 getByKey(String key); 3 void setByKey(String key, T value); 4} 5 6class FlieCache<T> implements Cache<T>{ 7 @override 8 getByKey(String key) { 9 return null; 10 } 11 12 @override 13 void setByKey(String key, T value) { 14 print("我是文件缓存 把key=${key} value=${value}的数据写入到了文件中"); 15 } 16} 17 18class MemoryCache<T> implements Cache<T>{ 19 @override 20 getByKey(String key) { 21 return null; 22 } 23 24 @override 25 void setByKey(String key, T value) { 26 print("我是内存缓存 把key=${key} value=${value} -写入到了内存中"); 27 } 28} 29void main(){ 30 31 32 // MemoryCache m=new MemoryCache<String>(); 33 34 // m.setByKey('index', '首页数据'); 35 36 37 MemoryCache m=new MemoryCache<Map>(); 38 39 m.setByKey('index', {"name":"张三","age":20}); 40} 41