tk挠痒痒网址发布页-秘密武器
历史搜索

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

游客2025-05-16 07:19:01
目录文章目录
  1. 泛型方法
  2. 泛型类
  3. 泛型接口

泛型方法

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

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,所以编译器会报错:

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

泛型类

把下面类转换成泛型类,要求 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} -写入到了内存中
标签:Dart

本文是由用户"游客"发布,所有内容的版权归原作者所有。没有经过书面许可,任何单位或个人不得以任何形式复制、转载、引用本网站的内容。否则将追究法律责任。

相关专题