《越空Dart教程》:第九节 泛型
自我介绍
大家好,我是越空,一位货真价实的16岁开发者。由于最近我在学习Dart这门语言,所以我就想总结我所学到的知识,分享给大家,让大家和我一起学习这门语言,争取做到可以让大家真的也学习到东西,并且少走一些弯路,感谢大家的支持。
这是我发表的第一套教程,多多少少会有不足的地方,还请大家多多见谅,有什么问题或者建议,也可以发表评论和私信我,希望可以得到大家的支持,我会再接再厉的!
那么接下来,我们正式开始今天的学习吧!
这是一套系列课程,新来的读者请从第一节开始学习
在上一节我们已经学完了Dart中的抽象类、多态、接口、和Mixins。
本节课我们将学习Dart中的泛型、泛型方法、泛型类、和泛型接口四部分。
第一部分:泛型
我们常用的数据类型 List、Map都属于是泛型,之前我们讲到的这种写法,
List l=new List<String>();
Map m=new Map<String,num>();
这样可以指定类型中的成员类型。这种特征就叫做泛型。泛型可以减少代码的复用性、以及对不特定数据类型的支持(类型校验)
第二部分:泛型方法
引出一个例子,
String fu(String a){
return a;
}
上面这段代码 方法的返回值指定是String类型,如果我们有一个新需求 框架不变 只是将返回值修改成List类型 那我们是不是要新写一个方法呢,为了减少这种重复性 且可以确保进行类型的校验,我们就可以使用泛型方法的写法,
T fu<T>(T a){
return a;
}
当然 这其中的‘T’不是固定的,可以是任意的命名,只要符合变量的命名规则即可。
也可以如下这样写,不过这样的话 只是校验传入的参数类型符合指定类型,不会效验返回值类型。
fu<T>(Ta a){
return a;
}
第三部分:泛型类
泛型类的写法,
class A<T>{
T a;
printInfo(){
print(this.a);
}
}
不过这里要特别说明一下,如果非泛型类继承了泛型类,例如,
这个样子继承是会报错的,因为子类B并不是泛型,没有泛型可以给A传泛型类型,只能这样,
不过这样写的话,A类就失去了泛型类的特征 又变成了普通类。
其实这种情况只要将B也写成泛型类,一切问题就解决了。不过这时候A和B类的泛型类型的命名要保持一致,或者B类直接重新命名一个新的泛型命名也是可以的。如:
实例化使用,
第四部分:泛型接口
泛型接口和泛型类的写法一样。因为接口本身也是类。
abstract class f<T>{
run(T value);
}
有子类去实现这个接口,写法规则和继承也是一样的,也就是不给父类传入泛型类型,或者子类自己成为泛型类 。
结束
好了,这节讲了泛型、泛型方法、泛型类、和泛型接口四大部分,希望对你有帮助。
下节预告
最后一课,讲解Dart中的库。
好了,这节就分享这么多了,我们下节再见,祝大家编程愉快!!