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语言(八)之异步

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,744评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,505评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,105评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,242评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,269评论 6 389
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,215评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,096评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,939评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,354评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,573评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,745评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,448评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,048评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,683评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,838评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,776评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,652评论 2 354