Dart 中泛型、泛型方法、泛型类、泛型接口

//泛型就是解决类、接口、方法的复用性以及对不特定数据的支持

void main() {
  print(printData<int>(2)); //int类型
  print(printData<String>("zhoujian")); //String 类型
}

//定义一个泛型方法
T printData<T>(T value) {
  return value;
}
[Running] dart "/Users/zhoujian/DartDemo/demo.dart"
2
zhoujian

[Done] exited with code=0 in 1.068 seconds

void main() {
  //指定类型
  List list = new List<String>();
  list.add("zhoujian");
  print(list);

  PrintClass printClass = new PrintClass<String>();
  printClass.addValue("物理");
  printClass.addValue("化学");
  printClass.printInfo();

  PrintClass p = new PrintClass<int>();
  p.addValue(89);
  p.addValue(76);
  p.printInfo();




}

//定义一个泛型类
class PrintClass<T> {
  List list = new List<T>();
  void addValue(T value) {
    this.list.add(value);
  }

  void printInfo() {
    for (var i = 0; i < this.list.length; i++) {
      print(this.list[i]);
    }
  }
}
[Running] dart "/Users/zhoujian/DartDemo/demo1.dart"
[zhoujian]
物理
化学
89
76

[Done] exited with code=0 in 1.14 seconds

void main() {
  FileCache fileCache = new FileCache<String>();
  fileCache.setKey("index", "我是字符串");

  MemoryCache memoryCache = new MemoryCache<Map>();
  memoryCache.setKey("index", {"name": "zhoujian", "age": 30});
}

//定义泛型接口
abstract class Cache<T> {
  getKey();
  void setKey(String key, T value);
}

class FileCache<T> implements Cache<T> {
  @override
  getKey() {
    return null;
  }

  @override
  void setKey(String key, T value) {
    print("我是FileCache:${value}");
  }
}

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

  @override
  void setKey(String key, T value) {
    print("我是MemoryCache:${value}");
  }
}
[Running] dart "/Users/zhoujian/DartDemo/demo2.dart"
我是FileCache:我是字符串
我是MemoryCache:{name: zhoujian, age: 30}

[Done] exited with code=0 in 1.161 seconds

发布了272 篇原创文章 · 获赞 68 · 访问量 40万+

猜你喜欢

转载自blog.csdn.net/u014005316/article/details/104325393