枚举
- 枚举是一种有穷序列集的数据类型
- 使用关键字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);
}
}
网友评论