什么是泛型
泛型就是解决类、接口、方法的复用,以及对不特定数据类型的校验。
void main() {
/*
泛型类
如果想让 List 仅仅支持字符串类型,可以将其声明为 List<String> (读作“字符串类型的 list”)
那么,当一个非字符串被赋值给了这个 list 时,开发工具就能检测到这样的做法可能存在错误。
*/
// 系统自带的泛型类
var names = new List<String>();
names.add("zhangsan")
var maps = new Map<int, String>();
maps[1]="value";
//泛型的字面量
var infos = <String>['Seth', 'Kathy', 'Lars'];
var pages = <String, String>{
'index.html': 'Homepage',
'robots.txt': 'Hints for web robots'
};
}
自己封装的泛型类
无法定义类型
class Demo {
var name;
show(a) {
print(a);
}
}
void main() {
var d1 = Demo();
d1.show(2);
d1.show('a');
}
固定数据类型,并校验
class Demo<T> {
var name;
show(T a) {
print(a);
}
}
void main() {
// 把 T 定义成 String
var d1 = Demo<String>();
d1.show('a'); //'a'
// d1.show(2); //报错
// 把 T 定义成 int
var d2 = Demo<int>();
d2.show(2); //2
// d2.show('a'); //报错
}
泛型方法
void main() {
// 泛型方法,我想传入什么数据类型,就返回什么数据类型
// 都来一遍,那么多,肯定不行
// String show(String name){}
// int show(int name){}
// 这样也不行,无法教养约束类型
// show(name){}
T show<T>(T a) {
return a;
}
print(show(1)); //1
print(show<String>('a')); //a
print(show<int>(1)); //1
}
接口
// 泛型的接口
abstract class DataForm<T> {
T name;
add(T);
}
为什么使用泛型
在类型安全上通常需要泛型支持,它的好处不仅仅是保证代码的正常运行,
正确指定泛型类型可以提高代码质量。
使用泛型可以减少重复的代码。