16. Dart中的泛型方法、泛型类、泛型接口

泛型方法

泛型方法可以约束一个方法使用同类型的参数、返回同类型的值,可以约束里面的变量类型。

getData(T value) {
  return value;
}

void main() {
  // print(getData(21));
  // print(getData('xxx'));

  getData('你好');
  getData(12);
  getData(123);
  //getData(123);
}

上面分别依次约束了类型是 String、int、double,最后一个约束了类型是 bool 但是传入了 int,所以编译器会报错:

泛型方法

泛型类

把下面类转换成泛型类,要求List里面可以增加int类型的数据,也可以增加String类型的数据。但是每次调用增加的类型要统一。

class PrintClass {
  List list = new List();
  void add(T value) {
    this.list.add(value);
  }

  void printInfo() {
    for (var i = 0; i < this.list.length; i++) {
      print(this.list[i]);
    }
  }
}

main() {
  PrintClass p = new PrintClass();

  p.add(12);

  p.add(23);

  p.printInfo();

  PrintClass arr = new PrintClass();
  arr.add('aa');
  arr.add('bb');
}

泛型接口

Dart中的泛型接口:

实现数据缓存的功能:有文件缓存、和内存缓存。内存缓存和文件缓存按照接口约束实现。

1、定义一个泛型接口 约束实现它的子类必须有getByKey(key)setByKey(key,value)

2、要求setByKey的时候的value的类型和实例化子类的时候指定的类型一致

abstract class Cache<T> {
  getByKey(String key);
  void setByKey(String key, T value);
}

class FlieCache<T> implements Cache<T> {
  @override
  getByKey(String key) {
    return null;
  }

  @override
  void setByKey(String key, T value) {
    print("我是文件缓存 把key=${key}  value=${value}的数据写入到了文件中");
  }
}

class MemoryCache<T> implements Cache<T> {
  @override
  getByKey(String key) {
    return null;
  }

  @override
  void setByKey(String key, T value) {
    print("我是内存缓存 把key=${key}  value=${value} -写入到了内存中");
  }
}

void main() {
  // MemoryCache m=new MemoryCache<String>();

  //  m.setByKey('index', '首页数据');

  MemoryCache m = new MemoryCache<Map>();

  m.setByKey('index', {"name": "张三", "age": 20});
}

运行结果:

我是内存缓存 把key=index  value={name: 张三, age: 20} -写入到了内存中

「点点赞赏,手留余香」

0

给作者打赏,鼓励TA抓紧创作!

微信微信 支付宝支付宝

还没有人赞赏,快来当第一个赞赏的人吧!

声明:本站所有资源及文章均来源于网络及用户分享或为本站原创,仅限用于学习和研究,任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
码云笔记 » 16. Dart中的泛型方法、泛型类、泛型接口

发表评论

IT互联网行业相关广告投放 更专业 更精准

立即查看 联系我们