zoukankan      html  css  js  c++  java
  • Dart语言学习(十四) Dart泛型

    什么是泛型?

    通俗理解:泛型就是解决 类 接口 方法的复用性、以及对不特定数据类型的支持(类型校验)

    如下代码,只能返回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=${value}的数据写入到了文件中");
      }
    }
    
    class MemoryCache<T> implements Cache<T>{
      @override
      getByKey(String key) {   
        return null;
      }
    
      @override
      void setByKey(String key, T value) {
           print("我是内存缓存 把key=${key}  value=${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
    
    
  • 相关阅读:
    PAT (Advanced Level) 1080. Graduate Admission (30)
    PAT (Advanced Level) 1079. Total Sales of Supply Chain (25)
    PAT (Advanced Level) 1078. Hashing (25)
    PAT (Advanced Level) 1077. Kuchiguse (20)
    PAT (Advanced Level) 1076. Forwards on Weibo (30)
    PAT (Advanced Level) 1075. PAT Judge (25)
    PAT (Advanced Level) 1074. Reversing Linked List (25)
    PAT (Advanced Level) 1073. Scientific Notation (20)
    PAT (Advanced Level) 1072. Gas Station (30)
    PAT (Advanced Level) 1071. Speech Patterns (25)
  • 原文地址:https://www.cnblogs.com/jukaiit/p/12260579.html
Copyright © 2011-2022 走看看