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("我是内存缓存 ");
  }
}
相关推荐
IC 见路不走28 分钟前
LeetCode 第91题:解码方法
linux·运维·服务器
汀沿河1 小时前
8.1 prefix Tunning与Prompt Tunning模型微调方法
linux·运维·服务器·人工智能
江山如画,佳人北望1 小时前
C#程序入门
开发语言·windows·c#
zly35001 小时前
centos7 ping127.0.0.1不通
linux·运维·服务器
AustinCyy1 小时前
【环境配置】Neo4j Community Windows 安装教程
windows·neo4j
奇怪的杰哥2 小时前
Win11 加快软件开机自启动
windows
power 雀儿2 小时前
集群聊天服务器---MySQL数据库的建立
服务器·数据库·mysql
cpsvps2 小时前
Windows内核并发优化
windows
BD_Marathon5 小时前
Ubuntu:Mysql服务器
服务器·mysql·ubuntu
0wioiw06 小时前
Ubuntu基础(监控重启和查找程序)
linux·服务器·ubuntu