《越空Dart教程》:第九节 泛型

《越空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中的库。

好了,这节就分享这么多了,我们下节再见,祝大家编程愉快!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值