什么是泛型
泛型就是解决类、接口、方法的复用,以及对不特定数据类型的校验。
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 定义成 Stringvar d1 = Demo<String>();d1.show('a'); //'a'// d1.show(2); //报错// 把 T 定义成 intvar 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)); //1print(show<String>('a')); //aprint(show<int>(1)); //1}
接口
// 泛型的接口abstract class DataForm<T> {T name;add(T);}
为什么使用泛型
在类型安全上通常需要泛型支持,它的好处不仅仅是保证代码的正常运行,
正确指定泛型类型可以提高代码质量。
使用泛型可以减少重复的代码。
