美文网首页
Dart语言基础(七)之枚举与泛型

Dart语言基础(七)之枚举与泛型

作者: 枫叶无处漂泊 | 来源:发表于2019-04-18 22:11 被阅读0次

    枚举

    • 枚举是一种有穷序列集的数据类型
    • 使用关键字enum定义一个枚举
    • 常用于代替常量,控制语句等

    Dart枚举特性

    • index 从0开始,依次累加
    • 不能指定原始值
    • 不能添加方法
    void main() {
    
      var currentSeason = Season.winter;
      //index可以获取在枚举中的值
      print(currentSeason.index); //3
      switch (currentSeason) {
        case Season.spring:
          print('spring season');
          break;
        case Season.summer:
          print('summer season');
          break;
        case Season.autumn:
          print('autumn season');
          break;
        case Season.winter:
          print('winter season');
          break;
        default:
      }
    }
    
    enum Season {
      // spring = 10,//报错,不能指定原始值
      spring,
      summer,
      autumn,
      winter
      //枚举不能添加方法
      // void test(){} //报错
    }
    
    

    泛型

    • Dart中类型是可选的,可使用泛型限定类型
    • 使用泛型能够有效的减少代码重复
    void main() {
      //这种可以添加任何类型
      var list = new List(); 
      list.add(1);
      /*
        如果我们类型需要添加是int类型1
        现在添加的字符串的1,又可能在你程序中出错
      */
      list.add('1');
    
      //使用泛型限定只能添加int类型
      var list1 = new List<int>();
      list1.add(1);
      // list1.add('1');//报错,只能添加int类型
    }
    
    

    泛型的使用

    • 类的泛型

    为了更好理解类的泛型的好处,我先写一个正常的工具类Utils

    
    void main() {
    
      //正常的方法
      //如果还需要Map和List还得添加相对应的属性和方法
      var utils = new Utils();
      utils.putInt(20);
      //定义int型的属性和给他赋值的方法
      print(utils.element);
    
      //定义String类型的属性和给他赋值的方法
      utils.putString('张三');
      print(utils.elementStr);
    }
    
    /** 
     * 这个不用泛型的话,要在类里面添加两个属性,和两个方法来给
     * 这两个属性赋值
    */
    class Utils {
    
      int element;
      String elementStr;
      void putInt(int element) {
    
        this.element = element;
      }
    
      void putString(String element) {
    
        this.elementStr = element;
      }
    }
    
    

    现在我使用类的泛型的方式创建一个工具类Genericity_Utils看看有啥代码有啥优点

    
    void main() {
      /**
       * 用泛型的好处就是灵活多变
       * 可能你需要int
       * 也有可能需要Sting、Map、List
       * 一般会在工具类经常用
       */
      var gUtils = new Genericity_Utils();
    
      gUtils.put('李四'); 
      //element是字符串类型
      print(gUtils.element); //李四
    
      gUtils.put(30);
      //element是int类型
      print(gUtils.element); //30
    
      gUtils.put([1,2]);
      //element是数组类型
      print(gUtils.element); //[1,2]
    }
    
    //<T>里面的T你可以随意
    //Utils_Genericity泛型类
    class Genericity_Utils<T> {
      
      T element;
      void put(T element) {
        this.element = element;
      }
    }
    
    
    • 方法的泛型
    void main() {
    
      var utils2 = new Utils2();
      utils2.put(1); //1
      utils2.put('王五'); //王五
      //已经使用泛型限定是String类型
      // utils2.put<String>(1); //报错
    }
    
    //方法的泛型
    class Utils2 {
    
      //使用泛型方法
      void put<T> (T elememt) {
    
        print(elememt);
      }
    }
    

    结尾

    下一篇 讲述一下Dart语言(八)之异步

    相关文章

      网友评论

          本文标题:Dart语言基础(七)之枚举与泛型

          本文链接:https://www.haomeiwen.com/subject/kkbxgqtx.html