美文网首页
Flutter/Dart - 泛型

Flutter/Dart - 泛型

作者: 沫之 | 来源:发表于2020-07-13 15:05 被阅读0次

泛型的定义

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

接下来我们实现一个方法 传入什么,返回什么。

T getData<T>(T value){
  return value;
} 

main(){
  print(getData<Int>(22))
  print(getData<String>('XXX'))

}

泛型类

集合list 就是泛型类的用法

main(){
    List list = new List<String>();
    list.add(12)//错误的写法
    list.add('12')
}
  • 自定义泛型类

把下面类转换成泛型类,要求List里面可以增加int类型的数据,也可以增加string类型的数据。

class PrintClass{
  List list = new List<int>();
  void add(int value){
    this.list.add(value);
  }
  void printInfo(){
    for(var i=0;i<this.list.length;i++){
      print(this.list[i]);
    }
  }
}

转换为:

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]);
    }
  }
}

main() {
  PrintClass p = new PrintClass();
  p.add(1);
  p.add('12');
  p.printInfo(); 

  PrintClass p2 = new PrintClass<int>();
  p2.add(1);
  p2.printInfo(); 

  PrintClass p3 = new PrintClass<int>();
  p3.add('23');
  p3.printInfo(); 
}

泛型接口

官方文档示例

abstract class ObjectCache {
  getByKey(String key);
  void setByKey(String key, Object value);
}

abstract class StringCache {
  getByKey(String key);
  void setByKey(String key, Object value);
}

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

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

  • 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', 123);//会报错,因为这里创建类时定义为String类型
  m.setByKey('index', '123'); //正常输出

  MemoryCache m2 = new MemoryCache<Map>();
  // m.setByKey('index', 123);//会报错,因为这里创建类时定义为String类型
  m.setByKey('index', {'name': 'hhh', 'age': 20}); //正常输出
}

相关文章

  • Flutter/Dart - 泛型

    泛型的定义 通俗理解:泛型就是解决类,接口,方法的复用性、以及对不特定数据类型的支持(类型校验) 接下来我们实现一...

  • Dart语言简介 2019-03-18

    标签(空格分隔): Dart Flutter Dart在静态语法方面和Java非常相似,如类型定义、函数声明、泛型...

  • Dart基础/Flutter-泛型

  • flutter【8】dart语言--泛型

    泛型 例如基础数组类型,List, 其中的E就是泛型,参数化类型,也可以用其他单个大写字母表示,如 E,T,...

  • Dart 泛型

    解决类、接口、方法的复用性以及对不特定数据类型的支持(类型校验) 这种输出指定的类型,可以使用泛型解决 字母 T ...

  • Java 泛型

    导读 移动开发知识体系总章(Java基础、Android、Flutter) 为什么会有泛型? 泛型类 泛型方法 泛...

  • dart语言学习笔记-4

    泛型 Dart的泛型会一直保留到运行时 Libraries & visibility import和library...

  • Dart 泛型 泛型类 泛型接口

    视频地址https://www.bilibili.com/video/av52490605?p=13 泛型就是解决...

  • Dart基础(八)-泛型

    1.简介:   Dart语言是强类型语言,强类型语言都支持泛型Generics。那么什么是泛型呢?泛型是指代码在使...

  • Dart 泛型 泛型方法 泛型类 泛型接口

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

网友评论

      本文标题:Flutter/Dart - 泛型

      本文链接:https://www.haomeiwen.com/subject/vxwacktx.html