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

枚举

  • 枚举是一种有穷序列集的数据类型
  • 使用关键字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语言(八)之异步

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。