Dart泛型方法、类、接口及自定义、内置、第三方库相关知识概述总结

Dart 泛型

泛型方法 泛型类 泛型接口

泛型的理解:泛型就是解决 类 接口 方法的复用性、以及对不特定数据类型的支持(类型校验)

场景,如果我们不指定类型传入参数,返回值的类型就得是这个类型:

// 1. 对传入参数和返回值 进行校验
T getData<T>(T value){
  return value;
}

// 2. 对传入参数进行校验 和 返回值不校验
getData<T>(T value){
  return value;
}

void main(){
  getData<String>('hello');  // hello
  getData<int>(123);  //  123
}

场景,列表数组类型

List list = new List<int>();
list.add(123); // ok
list.add('hello'); // error

场景,自定义一个泛型类

class PrintClass<T>{
  List list = new List<T>();

  void add(T value){
    this.list.add(value);
  }

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

void main(){

  // normal
  PrintClass p = new PrintClass();
  p.add(123);
  p.add('xxx'); // ok
  print(p.list);

  // T int class 
  PrintClass p1 = new PrintClass<int>();
  p1.add(123);
  p1.add('xxx'); // error 
  print(p1.list);
}

Dart泛型接口

实现数据缓存功能,有文件缓存,和内存缓存;文件缓存和内存缓存按照接口的约束来实现

  1. 定义一个泛型接口 约束实现它的子类必须有 getByKey(key) 和 setByKey(key, value)
  2. 要求setByKey的时候value的类型和实例化子类的时候啊指定类型一致
abstract class Cache<T>{
  getByKey(String key);
  void setByKey(String key, T value);
}

// 文件缓存
class FileCache<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', '首页数据'); // ok String

  FileCache f = new FileCache<Map>();
  // f.setByKey('index', 123); // error int not Map
  // f.setByKey('index', 'hello'); // error string not Map
  f.setByKey('index', {"name":"cat","age":25}); // ok Map
}

Dart 库

自定义库 系统库 第三方库

1. 我们自定义的库
  import "lib/xxx.dart"

2.系统内置的库
  import 'dart:math';
  import 'dart:io';
  import 'dart:convert';

3. Pub包管理系统中的库
  https://pub.dev/packages
  https://pub.flutter-io.cn/packages
  https://pub.dartlang.org/flutter

  (1) 需要在自己项目根目录新建一个 pubspec.yaml
  (2) 在pubspec.yaml文件 然后配置名称、描述、依赖等信息
  (3) 然后运行 pub get 获取包下载到本地
  (4) 项目中引入库 import 'package:http/http.dart' as http; 可以参看文档
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章