Dart语言学习(十四) Dart泛型
什么是泛型? 通俗理解:泛型就是解决 类 接口 方法的复用性、以及对不特定数据类型的支持(类型校验) 如下代码,只能返回string类型的数据
String getData(String value){
     return value;
}
如下代码,同时支持返回 string类型 和int类型 。但是这么些造成代码冗余
 String getData1(String value){
     return value;
 }
 int getData2(int value){
     return value;
 }
如下代码,同时返回 string类型 和number类型,不指定类型可以解决这个问题
 getData(value){
     return value;
 }
不指定类型放弃了类型检查。我们现在想实现的是传入什么 返回什么。比如:传入number 类型必须返回number类型 传入 string类型必须返回string类型
getData<T>(T value){
   return value;
}
void main(){
 print(getData());
 print(getData('123兔兔'));
 getData<String>('你好');
 print(getData<int>());
}
集合List 泛型类的用法 案例:把下面类转换成泛型类,要求List里面可以增加int类型的数据,也可以增加String类型的数据。但是每次调用增加的类型要统一
 class PrintClass<T>{
      List list=new List<T>();
      void add(T value){
          this.list.add(value);
      }
      void printInfo(){
          for(var i=;i<this.list.length;i++){
            print(this.list[i]);
          }
      }
 }
void main() {
  PrintClass p=new PrintClass<int>();
  p.add();
  p.add();
  p.printInfo();
}
Dart中的泛型接口:
    实现数据缓存的功能:有文件缓存、和内存缓存。内存缓存和文件缓存按照接口约束实现。
    1、定义一个泛型接口 约束实现它的子类必须有getByKey(key) 和 setByKey(key,value)
    2、要求setByKey的时候的value的类型和实例化子类的时候指定的类型一致
abstract class Cache<T>{
  getByKey(String key);
  void setByKey(String key, T value);
}
class FlieCache<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<Map>();
     m.setByKey('index', {"name":"张三","age":});
}
本文链接:https://www.cnblogs.com/jukaiit/p/12260579.html
Dart学习系列文章:https://www.cnblogs.com/jukaiit/category/1636484.html
Dart语言学习(十四) Dart泛型的更多相关文章
- Dart语言学习(十二) Dart面向对象
		
Dart作为一种高级语言,支持面向对象的很多特性,并且支持基于mixin的继承方式. 基于mixin的继承方式是指:一个类可以继承自多个父类,相当于其他语言里的多继承. 所有的类都有同一个基类Obje ...
 - Dart语言学习(十五) Dart函数方法
		
Dart函数方法可分为两类: 一.内置方法/函数: print(); 二.自定义方法: 自定义方法的基本格式: 返回类型 方法名称(参数1,参数2,...){ 方法体 return 返回值; } vo ...
 - Dart语言学习(十) Dart流程控制语句
		
一.条件语句:if.if...elseif.if...elseif...else int score = 95; if (score >=90) { print('优秀'); } else if ...
 - WCF技术剖析之十四:泛型数据契约和集合数据契约(下篇)
		
原文:WCF技术剖析之十四:泛型数据契约和集合数据契约(下篇) [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道<天天山海经>为此录制的节目视频(苏州话)]]在.NE ...
 - Go语言学习笔记四: 运算符
		
Go语言学习笔记四: 运算符 这章知识好无聊呀,本来想跨过去,但没准有初学者要学,还是写写吧. 运算符种类 与你预期的一样,Go的特点就是啥都有,爱用哪个用哪个,所以市面上的运算符基本都有. 算术运算 ...
 - Dart语言学习(七)Dart Map类型
		
映射(Maps)是无序的键值对: 常用属性: keys 获取所有的key值 values 获取所有的value值 isEmpty 是否为空 isNotEmpty 是否不为空 常用方法: remove( ...
 - R语言学习 第四篇:函数和流程控制
		
变量用于临时存储数据,而函数用于操作数据,实现代码的重复使用.在R中,函数只是另一种数据类型的变量,可以被分配,操作,甚至把函数作为参数传递给其他函数.分支控制和循环控制,和通用编程语言的风格很相似, ...
 - Scala学习十四——模式匹配和样例类
		
一.本章要点 match表达式是更好的switch,不会有意外调入下一个分支 如果没有模式能够匹配,会抛出MatchError,可以用case _模式避免 模式可以包含一个随意定义的条件,称做守卫 你 ...
 - 强化学习(十四) Actor-Critic
		
在强化学习(十三) 策略梯度(Policy Gradient)中,我们讲到了基于策略(Policy Based)的强化学习方法的基本思路,并讨论了蒙特卡罗策略梯度reinforce算法.但是由于该算法 ...
 
随机推荐
- 如何通过源码包的方式在linux安装python36
			
背景: python34的安装非常简单,直接用yum就可以安装,但是安装最新版的python36通过yum方式是不行的,需要通过源码包进行安装 具体步骤如下: 1.安装openssl静态库[pip3安 ...
 - string常用成员函数
			
string常用成员函数 std::string::clear Clear string Erases the contents of the string, which becomes an emp ...
 - CF1272C
			
Recently, Norge found a string s=s1s2…sns=s1s2…sn consisting of nn lowercase Latin letters. As an ex ...
 - jvm字节码助记符
			
反编译指令 javap -c xxxx.class JVM参数设置 -xx:+<option> 开启option -xx: -<option> ...
 - ssm框架整合,配置文件中的配置内容
			
转自:https://www.cnblogs.com/dong-dong-1/p/8724127.html 使用idea工具开发,用maven进行管理. 最近在写毕业设计,因为对ssm框架一直半解,常 ...
 - Windows 10下一步一步创建 Scrapy框架的项目
			
此文是本人的学习笔记,网上搜索了很多资料,也走了一些弯路,记录下安装的过程,以便日后回顾 1.安装Anaconda3,安装时默认选项 2.装完Anaconda3后,打开系统变量在path路径下增加An ...
 - Centos610安装Archiva
			
安装说明: https://www.cwiki.us/display/ArchivaZH/Linux+Installing+Standalone 1.下载地址 https://archiva.apac ...
 - buu Crypto 刷题记录
			
1.MD5 直接解. 2.url编码 直接解. 3.一眼就解密 base64. 4.看我回旋踢 对文本内容全部CaesarDecode. 5.摩丝 直接MorseDecode. 6.Quoted-pr ...
 - 卸载mysql时,提示libmysqlclient.so.16()(64bit) is needed by (installed) postfix
			
卸载时,提示错误,用这个命令就可以rpm -e --nodeps mysql-libs-5.1.73-5.el6_6.x86_64(这个是自己要卸载的版本) [root@unaryhost dev]# ...
 - PyQt5信号与槽详解
			
1.信号与槽函数基础'''信号与槽函数基础,信号是一个事件,发射信号之后槽函数就会执行'''from PyQt5.QtWidgets import *import sys class signal(Q ...