泛型
泛型的作用
- 规范数据类型,如指定 List 、Map的具体数据类型
- 作为占位符,增加通用性
- 泛型的生命周期:在调试模式下生效,在生产模式下不会检查泛型,目的是为了在调试模式下提前发现问题
new List();
new Map<String,String>();
class IntSum {
int sum(int a, int b){
return a+b;
}
}
class StringSum {
String sum(String a, String b){
return a+b;
}
}
class Sum<T> {
T sum(T t1,T t2){
return t1+t2;
}
}
base64的编码与解码
String str = 'encode str';
//base64编码
List<int> bytes = utf8.encode(str);
String encodeStr = base64Encode(bytes);
print(encodeStr); //ZW5jb2RlIHN0cg==
//base64解码
List<int>bytes2 = base64Decode(encodeStr);
String decodeStr = String.fromCharCodes(bytes2);
print(decodeStr); //encode str
重写运算符
- 通常加减乘除都是对数学的运算,通常都是针对基本数据类型的。
- Dart中重写运算符,可以使类之间,通过制定运算算法,进行逻辑操作
Test1 t1 = Test1(1,2);
Test1 t2 = Test1(3,4);
Test1 t3 = t1 +t2;
print('t3.a = ${t3.a} t3.b = ${t3.b}'); //t3.a = 4 t3.b = 6
对于 t1 ,其 a 为 1, b 为 2;对于 t2 ,其 a 为 3, b 为 4。
当执行 t3 = t1 + t2 时,调用自定义的加法运算符重载函数。
在这个函数中,计算新的 Test1 对象的 a 值为 t1 的 a (1)加上 t2 的 a (3),即 4;
计算新的 Test1 对象的 b 值为 t1 的 b (2)加上 t2 的 b (4),即 6。
所以最终得到 t3 的 a 为 4, b 为 6。
class Test1{
int a;
int b;
Test1(this.a,this.b);
Test1 operator +(Test1 t){
return Test1(a+t.a,b+t.b);
}
}
1.定义了一个类的结构:它明确了 Test1 类包含的成员变量 a 和 b,这些成员变量用于存储特定的数据。
2.提供了对象创建的模板:通过构造函数 Test1(this.a, this.b) 可以创建具有特定 a 和 b 值的 Test1 对象,如 t1 和 t2。
3.定义了运算符重载:通过定义 operator + 方法,实现了对两个 Test1 对象进行加法运算的自定义逻辑,使得可以按照特定规则
计算并得到新的 Test1 对象 t3。
总的来说,class Test1 是整个代码逻辑的核心,它定义了相关的数据结构和操作行为,使得对这类对象的处理和运算得以实现。