Flutter 泛型 泛型方法 泛型类 泛型接口

目录

泛型简单使用

泛型类的简单使用

泛型接口的使用


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

泛型简单使用

复制代码
main(){
  print(getData2("XXX"));
  getData2<String>("XXX");
  getData2<int>(1);

}


String getData(String value) {
  return value;
}

//不指定返回类型放弃了类型检查。我们现在想实现的是传入什么 返回什么。
getData1(value) {
  return value;
}

//泛型
T getData2<T>(T value) {
  return value;
}

//泛型
getData3<T>(T value) {
  return value;
}


  List list = List.filled(2, "");
  list[0] = "张三";
  list[1] = "李四";
  print(list);

  List list1 = List<String>.filled(2, "");
  list1[0] = "张三";
  list1[1] = "李四";
  print(list1);

  List list2 = List<int>.filled(2, 0);
  list2[0] = 1;
  list2[1] = 2;
  print(list2);

泛型类的简单使用

复制代码
main() {

 var list3 = MyList();
  list3.add(1);
  list3.add(5);
  print(list3.getList());

  //可以设置多个类型的数据
  var list4 = MyList1();
  list4.add("小飞");
  list4.add(5);
  list4.add(true);
  print(list4.getList());

}


class MyList {
  List list = <int>[];

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

  List getList() {
    return list;
  }
}

//泛型类
class MyList1<T> {
  List list = <T>[];

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

  List getList() {
    return list;
  }
}

泛型接口的使用

复制代码
/**
    Dart中的泛型接口:
    实现数据缓存的功能:有文件缓存、和内缓存。内存缓存和文件缓存按照接口约束实现。
    1、定义一个泛型接口 约束实现它的子类必须有getByKey(key)和 setByKey(key,value)
    2、要求setByKey的时候的value的类型和实例化子类的时候指定的类型一致
 */


main(){


//举例
  var memoryCache = MemoryCache<String>();
  memoryCache.setBykey("name", "张三");

  var memoryCache1 = MemoryCache<Map>();
  memoryCache1.setBykey("name", {"name": "张三", "age": 20});

}

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, value) {
    print("我是文件缓存 ");
  }
}

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

  @override
  void setBykey(String key, value) {
    print("我是内存缓存 ");
  }
}
相关推荐
Vex2une9 小时前
Windows 性能监视器发展史:从 PerfMon 计数器到 XPerf 深度诊断
windows·wpa·etw·性能监视器·perfmon·性能计数器·xperf
在角落发呆9 小时前
工具配置备份步骤:从手动备份到自动化方案
运维·windows·自动化
_upupup10 小时前
Linux的调试工具——gdb/cgdb
linux·服务器
Vd7H20A710 小时前
Windows 下用 llama.cpp 运行 Qwen3.8-27B 并开启 512K 上下文 完全指南
windows·llama
Android系统攻城狮14 小时前
Linux Gstreamer深度解析之gst_audio_sink_get_type调用流程与实战(六十五)
linux·运维·服务器·音视频·gstreamer音视频·音视频进阶·gstreamer音视频进阶
zyseo815 小时前
谷歌SEO 站内搜索优化实战:把站内搜索词变成关键词金矿
java·服务器·数据库
王大傻092815 小时前
堆叠注入(Stacked Queries Injection)详解:原理、利用与防御
服务器·网络·数据库·web安全·网络安全
bigcarp15 小时前
安卓模拟器MUMU+tcpdump抓包Socket协议流量
服务器·网络·tcpdump
是个西兰花15 小时前
TCP套接字编程实战:从服务器搭建到多进程处理
服务器·网络协议·tcp/ip
zhangzeyuaaa16 小时前
Ruby `require` 完全指南:从 `$LOAD_PATH` 到 `require_relative`
服务器·前端·ruby